在 React Native 和 Redux 中,我有一个 <NavigationCardStack/>
作为根组件。每次更新状态时,redux-logger 都会正确更新下一个/新状态。
并且在状态更改之后,当新更新的状态在子组件中被控制台记录时,它不会控制台记录更新的状态,而是控制台记录初始状态(在子组件 childPage.js
和日志记录:render(){ console.log(this.props.state) return(...) ...
中)。
会不会是我错误地连接到 Redux 或缺少某些东西?因为,一切似乎都运行良好且合情合理。
提前致谢!
以下是我的一些代码片段:
这是我的 reducer,即使添加和更新了其他属性,子组件也只会在此处记录 initialState:
const initialState = {
meetUp: false,
}
function itemReducer(state = initialState, action) {
switch(action.type) {
case ITEM_QUANTITY:
return {
...state,
quantity: action.quantity
}
case ITEM_PRICE:
return {
...state,
price: action.price
}
case ITEM_MEET_UP:
return {
...state,
meetUp: action.meetUp
}
default:
return state
}
}
export default itemReducer
然后像这样连接到根组件:
function mapStateToProps(state) {
return {
itemInfo: state.itemReducer,
...
}
}
export default connect(
mapStateToProps,
{
itemQuantity: (value) => itemQuantity(value),
itemPrice: (value) => itemPrice(value),
itemMeetUp: (value) => itemMeetUp(value),
}
)(NavigationRoot)
通过以下操作:
export function itemMeetUp(value) {
return {
type: ITEM_MEET_UP,
meetUp: value
}
}
export function itemQuantity(value) {
return {
type: ITEM_QUANTITY,
quantity: value
}
}
export function itemPrice(value) {
return {
type: ITEM_PRICE,
price: value
}
}
state={this.props} 表示状态以及它应该如何传递给子组件
_renderScene (props) {
const { route } = props.scene
return (
<route.component _handleNavigate={this._handleNavigate.bind(this)} state={this.props}/>
)
}
<NavigationCardStack
renderScene={this._renderScene}
...
/>
最佳答案
可以 this issue有关系?看起来很相似,因为即使 redux 状态发生变化,NavigationCardStack
也不会更新,而 redux-logger
会记录变化。我无法从您的代码示例中看出,但是测试此方法的一种方法可能是 connect
child 或一个 child 直接连接到您的 redux 存储,而不是让 NavigationCardStack
通过将状态存储为 Prop ?上面的 github 问题也有一些 hacky 解决方法,但我对 react-native 不是很熟悉所以我不能提供太多帮助。
关于javascript - React Native 和 Redux : Why aren't child components re-rendering on every state update?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354493/