gpt4 book ai didi

reactjs - Redux 状态不是第一次更新

转载 作者:行者123 更新时间:2023-12-04 14:22:18 24 4
gpt4 key购买 nike

我知道这个网站上有很多相同的问题,但没有一个链接到我的问题。 This离我很近,但我还没有使用 DB。只是一个完整的 react/redux 实现。

我在我的示例项目中为 reactstrap modal 实现了 redux,这让我很困惑,因为我的一个 reducer 没有第一次更新状态。考虑我的 redux 设置。

Action

export const showModal = (data) => {
return {
type: MODAL_TOOL,
payload: data
};
}

reducer

 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;
}
}

联合 reducer

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 时,即使来自 reducer 的日志显示为 true,它也不会更新状态。它第二次工作并更新 redux state。我的任务 CRUD 在相同的 redux 设置下运行良好。我是不是误会了什么?

最佳答案

我推荐使用 mapDispatchToProps 因为这个函数是用来更新 redux store 的。例如,您应该在点击处理程序中调用 onTodoClick,如下所示。并更新 redux 商店。现在您将在您的操作中获得“toggleTodo”。接下来是使用 mapStateToProps 获取 redux 数据。它应该是这样工作的。

const mapDispatchToProps = (dispatch) => {
return {
onTodoClick: (isOpen) => {
dispatch(toggleTodo(isOpen))
}
}
}

这里有一些链接,可以详细了解这个概念。

https://learn.co/lessons/map-dispatch-to-props-readme

关于reactjs - Redux 状态不是第一次更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52923018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com