将props传递到redux初始状态

3

我想从Home.js中获取的props在reducer.js中设置初始状态。

我尝试调用home: this.props.homedata来设置初始状态,但是它没有起作用。

import { COMMENT_SHOW, LIKE_SHOW, HOMEDATA_SHOW } from '../actions/types';

const INITIAL_STATE = {
    wallid: '',
    comment: '',
    like: '',
    home: this.props.homedata
};
export default (state = INITIAL_STATE, action) => {
........///////////
}

Reducer.js

当应用程序加载时,我希望在主页中获得与 homedata 状态相同的数据。


不确定这是否是最佳方法,但您可以在生命周期方法中调用您的操作(通常用于更新主页),例如 ComponentDidMount,并发送这些属性。 - DannyMoshe
我在mapStateToProps中添加了if else条件来解决问题。如果reducer返回的homedata为空,则将homedata分配给当前props,否则它将从reducer获取状态。 - SIKANDAR KHAN
2个回答

0

Reducers没有props。你可能从React中学到了这个。

Reducer应该根据分发的操作更新Redux状态。要将状态更新为homedata,您可以分派一个操作并在Reducer中返回数据作为新状态。

// action to dispatch
{
   type: "UPDATE_HOME",
   payload: homedata
}

// Reducer.js
const INITIAL_STATE = {
    wallid: '',
    comment: '',
    like: '',
    home: {}
};
export default (state = INITIAL_STATE, action) => {
  switch(action.type) {
    case "UPDATE_HOME":
      return {
        ...state,
        home: action.payload
      };
    default:
      return state;
  }
}


我添加了if else条件来解决这个问题。如果reducer返回的homedata为空,则在我的mapstatetoprops中,homedata将被分配给当前props,否则它将从reducer获取状态。顺便说一句,感谢你的帮助。 - SIKANDAR KHAN

0
我认为不可能将prop传递给你的reducer。你可以做的是有一个数据集文件,比如说data.js,并导出你的数据。将其导入到你的reducer文件中,并将其设置为你的初始数据。
import { COMMENT_SHOW, LIKE_SHOW, HOMEDATA_SHOW } from '../actions/types';
import { homeData } from 'path/to/data';

const INITIAL_STATE = {
    wallid: '',
    comment: '',
    like: '',
    home: homedata,
};
export default (state = INITIAL_STATE, action) => {
........///////////
}

如果您不希望应用程序在运行时修改示例数据。也许您需要重置您的主页数据,那么您需要在将其传递到初始状态之前克隆数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接