【发布时间】:2017-01-14 05:38:42
【问题描述】:
在 React Native 和 Redux 中,我有一个 <NavigationCardStack/> 作为根组件。并且每次更新状态时,redux-logger 都会正确更新下一个/新状态。
并且在状态改变之后,当新更新的状态是控制台登录子组件时,它不会控制台记录更新的状态,而是控制台记录初始状态(在子组件中childPage.js 和日志记录:@987654324 @)。
可能是我错误地连接到 Redux 或遗漏了什么?因为,一切似乎都运行良好且有意义。
提前谢谢你!
这是我的代码的一些 sn-ps:
这是我的 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}
...
/>
【问题讨论】:
-
很难从所提供的 sn-ps 中看出 - 有没有机会建立一个 github repo 或 jsfiddle?
-
出于好奇,当您尝试从 childPage.js 组件中的 componentWillReceiveProps(props) 生命周期方法访问 console.log 时会发生什么?该方法是否被调用过?如果是这样,您能否记录 props 参数以确定组件是否接收到正确的属性?
-
@bryonbean 我将控制台日志记录为
constructor(props) { super(props) console.log(props),它确实在页面第一次呈现时打印出所有初始属性。但是在更新之后,控制台日志不再被调用,因此尽管状态更新,它也永远不会被重新渲染,对吗? -
不,构造函数只会在实例化时被调用一次,这是设置初始/原始属性的地方。组件属性的后续重新渲染可以通过添加一个名为
componentWillReceiveProps(props)的生命周期方法来确定。在此方法中,您可以调用console.log(props)来确定在组件上设置了哪些新属性。 (见:facebook.github.io/react/docs/component-specs.html) -
@bryonbean 我在
render() { console.log(props) return()}内部尝试过,当状态更新时,控制台会再次记录,但不是更新状态,而是控制台记录初始状态。我在render(){return()}之前尝试过componentWillReceiveProps(props) { console.log(props) },但从未被调用,也没有控制台日志
标签: javascript html reactjs react-native redux