【发布时间】:2017-10-20 06:57:59
【问题描述】:
我一直使用 react-redux connect 来配置 props,但我需要使用 react Component 来使用生命周期方法。我注意到我从商店获取的道具似乎是静态的,并且它们不会随着商店的更新而更新。
代码:
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
如何设置 title、isOpen 和 message 以便它们始终反映商店价值?
【问题讨论】:
-
this.forceUpdate() 需要什么?
-
使用 connect 将你的组件连接到 redux store。然后使用 mapStateToProps 获取更新后的 props。
-
@Codesingh 在代码的更下方有一个视图,它使用
onLayout来获取视图的高度。然后它使用高度设置内容样式。这就是为什么我需要在安装后调用forceUpdate- 因为第一个渲染没有高度。
标签: reactjs react-native redux react-redux