首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >没有第一次更新的Redux状态

没有第一次更新的Redux状态
EN

Stack Overflow用户
提问于 2018-10-22 05:44:06
回答 1查看 2.6K关注 0票数 3

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

我在reactstrap modal的示例项目中实现redux,这让我感到困惑,因为我的一个还原器第一次没有更新状态。考虑一下我的redux设置。

Action

代码语言:javascript
代码运行次数:0
运行
复制
export const showModal = (data) => {
   return {
    type: MODAL_TOOL,
    payload: data
  };
}

减速器

代码语言:javascript
代码运行次数:0
运行
复制
 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;
   }
}

联合收割机

代码语言:javascript
代码运行次数:0
运行
复制
export default combineReducers({
    modal: modalReducer
});

组件

代码语言:javascript
代码运行次数:0
运行
复制
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设置下运行良好。我有误解什么吗?

EN

回答 1

Stack Overflow用户

发布于 2018-10-22 06:28:27

我建议使用mapDispatchToProps,因为这个函数是用来更新redux存储的。例如,您应该在单击处理程序中调用onTodoClick,如下所示。更新redux商店。现在你将在你的行动中得到'toggleTodo‘。接下来是使用mapStateToProps获取redux数据。它应该是这样运作的。

代码语言:javascript
代码运行次数:0
运行
复制
const mapDispatchToProps = (dispatch) => {
  return {
    onTodoClick: (isOpen) => {
      dispatch(toggleTodo(isOpen))
    }
  }
}

这里是一些链接,以获取更多关于这一概念。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52923018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档