Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Redux没有';重新渲染组件?_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 为什么Redux没有';重新渲染组件?

Javascript 为什么Redux没有';重新渲染组件?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个具有componentDidMount()方法的组件,它从服务器获取如下信息: componentDidMount() { this.getAccount(); } getAccount = async () => { try { this.res = await API.get(`account`, {}); this.props.setData(this.res.data); } catch (err) {

我有一个具有
componentDidMount()
方法的组件,它从服务器获取如下信息:

componentDidMount() {
    this.getAccount();
}

getAccount = async () => {
    try {
        this.res = await API.get(`account`, {});
        this.props.setData(this.res.data);
    } catch (err) {
        this.props.history.push(`/add`);
    }
}
我有一个存储信息的减速机:

const initialState = {}

const accountReducer = (state = initialState, action) => {
    if (action.type === 'SET_ACCOUNT_DATA') {
        return action.data;
    } else {
        return state;
    }
}

export default accountReducer;
但我的组件在执行操作后不会重新渲染。为什么? 我的行动代码是:

export const setData = (data) => {
    return {
        type: 'SET_ACCOUNT_DATA',
        data
    }
}
请帮忙,我做错了什么

更新: 我的地图方法是:

const mapStateToProps = (state) => ({

})

const mapDispatchToProps = (dispatch) => {
    return {
        setData: (data) => {
            return dispatch(setData(data));
        }
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(Account);
Mu操作
导入
正确。检查过了

  • 在reducer中,您可能希望复制原始状态并将更改添加到其中,因此我认为您的reducer应该如下所示:

    const accountReducer = (state = initialState, action) => {
      if (action.type === 'SET_ACCOUNT_DATA') {
        return {...state, data: action.data};
      } else {
        return state;
      }
    }
    
  • 如果组件具有
    mapStateToProps()
    ,并且返回空对象,则如果没有道具/状态更改,组件将不会重新渲染。。。您的
    MapStateTrops()
    方法可能如下所示:

    const mapStateToProps = state => ({
      data: state.yourReducer.yourDataFromStore
    })
    

  • 是否通过放置console.log('state::',state)进行检查;在MapStateTops()中?又叫了吗? 你也能试试这个吗

    const accountReducer = (state = initialState, action) => {
        if (action.type === 'SET_ACCOUNT_DATA') {
            return Object.assign({}, state, {...state, data:action.data });
        } else {
            return state;
        }
    }
    
    在你的地图上

    const mapStateToProps = (state)=>({
      data: state.reducername.data
    })
    

    你能告诉我你是如何连接组件的吗?(并确保将其与适当的
    导入一起使用)
    减速机
    容器
    相互连接?@Solo如果OP在
    连接
    中通过
    mapDispatchToProps
    react-redux
    ),则隐式注入调度。但我们确实需要了解OP是如何使用
    connect
    的。如果有的话,你在这个州有什么财产?是否仅与action.data相同?或者帐户数据只是您所在州的一个属性?您没有在
    MapStateTrops
    中绑定任何值,因此没有任何更改。第二个是答案。还要感谢@Davin tryon谢谢!但是第一个是在使用redux:D时必须具备的:如果您像以前那样编写减缩器,那么每次都会删除整个存储,减缩器只返回一个新值,而不返回原始状态的数据:/Yes,我会修复它。这些是为了简单起见,以表明我从最初的状态就有了全新的状态。