【发布时间】:2017-01-28 17:42:31
【问题描述】:
我有父组件和子(listView)组件。我的目标是将后端调度的数据从父母发送给孩子。我通过单击按钮来实现。问题是子级在第二个父级按钮单击后呈现。也许我的错误在componentWillReceiveProps的某个地方?
家长:
class Parent extends Component {
constructor(props) {
super(props);
this.state = {
dataSource: '',
noRepos: false
};
}
componentWillReceiveProps(newProps) {
this.setState({
dataSource: newProps.data
});
this.validateData(newProps)
}
submitUsername() {
if(this.validateInput()){
this.props.dispatch({type: 'DUMMY', state: this.state.username});
} else {
this.setState({emptyInput: true});
}
}
render() {
return (
...
<View>
<ListViewComponent dataRecieved={this.state.dataSource} />
</View>
...
);
}
}
export default connect(state => {
return {
data: state.data,
};
})(Parent);
孩子:
export default class ListViewComponent extends Component {
constructor(props) {
super(props);
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2,
}),
};
}
propTypes: {
dataRecieved: PropTypes.func.string
};
componentWillReceiveProps(newProps) {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(this.props.dataRecieved),
});
}
renderRow(rowData) {
return (
<View>
<Text>{rowData.name}</Text>
</View>
);
}
render() {
return (
<View>
<ListView dataSource={this.state.dataSource}
enableEmptySections={true}
renderRow={this.renderRow} />
</View>
);
}
}
【问题讨论】:
-
错误是您的
ListViewComponent的componentWillReceiveProps使用的是this.props.dataReceived而不是newProps.dataReceived。另外请检查您的拼写,应该是Received,而不是Recieved。
标签: javascript reactjs react-native react-redux