【发布时间】:2019-08-20 03:39:22
【问题描述】:
我有一个反应组件(下面的总结代码)。 react 组件应在单击时在屏幕上显示动画,并将操作发送到 redux 服务器,然后将其远程存储。当远程服务器用新事件更新客户端时,本地组件应该从本地删除匹配的事件,并且只呈现其他用户拥有的事件数量。
但是,我不知道如何从 redux 状态更新组件状态。我可以获得重复的事件,并且我知道要删除哪些事件。但是,如果我使用 setSelfData 更新状态,它会变成一个无限循环,因为 memo 组件仍在更新旧的 redux 状态,它没有被清除。有没有办法使用钩子从 redux 状态更新本地状态?或者,最好让处理按钮点击的 saga 也更新 redux 存储,以便在 reducer 中过滤掉后续通知,以便 mapStateToProps 只接收要呈现的新事件?
type OwnProps = {
className: string;
}
type ReduxStateProps = {
widgetData: number[];
}
const MyPanel = React.memo<OwnProps & ReduxStateProps>(({ className, widgetData } ) => {
const initialData = {
selfWidgetData = [],
animationsRequired = 0,
};
const [selfData, setSelfData] = useState<DataRenders>(initialData);
const onButtonClick = () => {
selfData.selfWidgetData.push(Date.now());
selfData.animationsRequired = 1;
setSelfData(selfData);
};
if(widgetData && widgetData.length > 0) {
const {updatedSelfData, updatedAnimationsRequired} = filterDuplicateData(selfData.selfWidgetData, widgetData);
setSelfData({
selfWidgetData = updatedSelfData,
animationsRequired = updatedAnimationsRequired,
});
}
return (
//render
);
});
const mapStateToProps = ({...});
const mapDispatchToProps = ({...});
export default connect(mapStateToProps, mapDispatchToProps)(MyPanel);
【问题讨论】:
标签: reactjs react-redux