gpt4 book ai didi

javascript - Redux 连接的 React 应用程序 - 在我的副作用完成之前如何不渲染它?

转载 作者:行者123 更新时间:2023-12-03 00:40:54 28 4
gpt4 key购买 nike

react 16.3Redux 3.7.2

componentDidMount 中,我通过副作用 (AJAX) 调用填充 Prop (mapDispatchToProps) 的操作。

我的问题是它重用了 redux 中的旧 props - 首先渲染它,然后在更新通过 mapDispatchToProps 到达后重新渲染。

我不想让这个子组件记住它的状态或 Prop - 我需要它每次都是一张白纸。

文档指出组件在卸载时被销毁,但情况似乎并非如此,因为当您转到此页面或在页面上并重新加载时,状态有所不同。

因为当您重新加载时没有数据,因此页面必须等待副作用完成。

不幸的是,我无法为您提供代码示例 - 但任何接触过这种奇怪行为的人都应该认识我的描述......

最佳答案

您的组件可能会以“旧”状态重新渲染,因为这是您存储在 redux 中并传递给组件的状态

您可以做的是在 componentWillUnmount 中触发 redux 操作,从而破坏该状态。

EG(伪伪代码):

reducer :

const initialState = { counter: 0 };

const myReducer = (state = initialState, action) => {
switch(action.type) {
case 'DO_SOMETHING':
return {
...state,
counter: state.counter + 1
};

case 'CLEAN_STATE':
return initialState;
}
}

组件:

class MyComponent extends React.Component {
render () {
return (
<div>
<span>{this.props.counter}</span>
<button onClick={triggerActionThatCausesDO_SOMETHING} />
</div>
);
}

componentWillUnmount () {
triggerActionThatCausesCLEAN_STATE();
}
}

关于javascript - Redux 连接的 React 应用程序 - 在我的副作用完成之前如何不渲染它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53471356/

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