我知道有很多相同的问题张贴在这个网站上,但没有一个链接到我的问题。This离我很近,但我还没有使用DB。只是一个完整的react/redux
实现。
我在reactstrap
modal
的示例项目中实现redux,这让我感到困惑,因为我的一个还原器第一次没有更新状态。考虑一下我的redux设置。
Action
export const showModal = (data) => {
return {
type: MODAL_TOOL,
payload: data
};
}
减速器
const initialState = {
isOpen: false
};
export default function(state=initialState, action) {
switch(action.type) {
case MODAL_TOOL:
console.log(action.payload.isOpen); //logs true
return {
...state,
isOpen: action.payload.isOpen
}
default:
return state;
}
}
联合收割机
export default combineReducers({
modal: modalReducer
});
组件
class TaskModel extends Component {
state = {
isOpen: this.props.modal.isOpen
}
onCreateTask = () => {
this.props.showModal({
isOpen: !this.props.modal.isOpen
});
this.setState({
isOpen: this.props.modal.isOpen
});
}
render() {
return(
<Button
size="sm"
color="dark"
style={{marginBottom: '2rem'}}
onClick={this.onCreateTask}
>
Add Task
</Button>
)
}
}
const mapStateToProps = (state) => ({
modal: state.modal
});
export default connect(mapStateToProps, { showModal })(TaskModel);
当我第一次单击按钮Add Task
时,它将不会更新状态,甚至还原器中的日志也不会显示为true。它第二次工作,并更新redux
state
。我用于这些任务的CRUD在相同的redux
设置下运行良好。我有误解什么吗?
发布于 2018-10-22 06:28:27
我建议使用mapDispatchToProps
,因为这个函数是用来更新redux存储的。例如,您应该在单击处理程序中调用onTodoClick
,如下所示。更新redux商店。现在你将在你的行动中得到'toggleTodo‘。接下来是使用mapStateToProps
获取redux数据。它应该是这样运作的。
const mapDispatchToProps = (dispatch) => {
return {
onTodoClick: (isOpen) => {
dispatch(toggleTodo(isOpen))
}
}
}
这里是一些链接,以获取更多关于这一概念。
https://stackoverflow.com/questions/52923018
复制相似问题