在CategoryFeed类中,我有类似以下内容:
filename
这是updateCurrentForum的样子:
class CategoryFeed extends Component {
...
componentDidMount() {
const {
params,
currentForum,
updateCurrentForum,
} = this.props;
alert(params.fid);
updateCurrentForum(params.fid);
alert(currentForum);
}
...
export default connect(
(state) => { return {
currentForum: state.app.currentForum,
...
(dispatch) => { return {
updateCurrentForum: (currentForum) => { dispatch(updateCurrentForum(currentForum)); },
...
在Reducer中,我的定义如下:
export const updateCurrentForum = (currentForum) => {
alert("inside is " + currentForum);
return {
type: UPDATECURRENTFORUM,
payload: currentForum,
};
};
这是我期望的工作方式。
我该如何解决?
答案 0 :(得分:2)
您将无法在currentForum
中获得componentDidMount()
的更新值。这是因为componentDidMount()
仅在组件安装后运行。
更改componentDidMount()
中的道具会导致组件重新渲染。因此,可以在render()
或componentDidUpdate()
个周期中访问更新的值。
您可以将alert
或console.log
移至render方法,您应该会看到更新后的值
答案 1 :(得分:1)
componentDidMount
,并且您在其中调用的updateCurrentForum(params.fid)
会更新currentForum
,但此更改将被componentDidUpdate
捕获。有关更多详细信息,您可以查看组件http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
当前currentForum
拥有
const {
params,
currentForum,
updateCurrentForum,
} = this.props;
,当前可能未定义。尝试在道具中分配一些值,看看它是否从undefined
变为您提供的value