gpt4 book ai didi

reactjs - React props 不随 redux store 更新

转载 作者:行者123 更新时间:2023-12-03 13:23:17 26 4
gpt4 key购买 nike

我一直使用react-redux connect来配置props,但我需要使用react Component来使用生命周期方法。我注意到我从商店获取的 Prop 似乎是静态的,并且它们不会随着商店的更新而更新。

代码:

class AlertModal extends Component {

title
isOpen
message

componentDidMount() {
const { store } = this.context
const state = store.getState()
console.log('state', state)
console.log('store', store)
this.unsubscribe = store.subscribe(() => this.forceUpdate())
this.title = state.get('alertModal').get('alertModalTitle')
this.isOpen = state.get('alertModal').get('isAlertModalOpen')
this.message = state.get('alertModal').get('alertModalMessage')
this.forceUpdate()
}

componentWillUnmount() {
this.unsubscribe()
}

updateAlertModalMessage(message) {
this.context.store.dispatch(updateAlertModalMessage(message))
}
updateAlertModalTitle(title) {
this.context.store.dispatch(updateAlertModalTitle(title))
}

updateAlertModalIsOpen(isOpen) {
this.context.store.dispatch(updateAlertModalIsOpen(isOpen))
}

render() {

console.log('AlertModal rendered')
console.log('AlertModal open', this.isOpen) <======= stays true when in store it is false

return (
<View

如何设置 titleisOpenmessage 以便它们始终反射(reflect)商店值?

最佳答案

应该是这样的。在您的确认组件中:

const mapStateToProps = (state) => {
return { modalActive: state.confirmation.modalActive };
}

export default connect(mapStateToProps)(Confirmation);

在您的 reducer 索引文件中,应该是这样的:

const rootReducer = combineReducers({
confirmation: ConfirmationReducer
});

我相信您在这里有自己的名为ConfirmationReducer的 reducer 文件。应该是这样的。

import { ON_CONFIRM } from '../actions';

const INITIAL_STATE = {modalActive: true};
export default function(state = INITIAL_STATE, action) {
console.log(action);
switch (action.type) {
case ON_CONFIRM:
return { ...state, modalActive: action.payload };
}

return state;
}

确保您编写自己的操作创建器来创建具有上述类型和 bool 类型相关负载的操作。

最后,您应该能够从“确认”组件内的商店访问该属性,如下所示:

{this.props.modalActive}

您还没有发布完整的代码,因此很难为确切的场景提供解决方案。希望这可以帮助。快乐编码!

关于reactjs - React props 不随 redux store 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44082014/

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