【发布时间】:2016-06-25 02:29:59
【问题描述】:
在 React-Native 中使用 ListView,我看到不一样,将 props 移动到列表项,
仅通过引用将函数作为道具传递,并在子组件中调用参数,或者
将函数作为定义了参数的 props 传递,并在子节点中调用不带参数的函数
所有解决方案均无效。
调用的函数是 Redux 的 Actions 创建者,并被分派。这是 Redux 还是 React-Native 的问题(可能是 ReactJS)
这是一个sn-p,市场为//错误的代码行不起作用,然后是好的代码行
class App extends Component {
// On props
// data: an Array
// doThis: an action creator of Redux
// doThat: idem
constructor(){
super();
this.ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
}
render () {
const dataSource = this.ds.cloneWithRows(this.props.data);
return (
<View>
<ListView style={{flex:1}}
dataSource={dataSource}
renderRow={(rowData, sectionID, rowID) =>
<Item rowData={rowData}
//ERROR
//onPress={this.props.doThis}
//onLongPress={this..props.doThat}
//RIGHT NO ERROR TOO
onPress={() => this.props.doThis(rowData)}
onLongPress={() => this.props.doThat(rowData)}
/>
}
/>
</View>
)
}
}
class Item extends Component {
render() {
return (
<View>
<TouchableHighlight
//ERROR
//onPress={() => { this.props.onPress( this.props.rowData ) }}
//onLongPress={() => { this.props.onLongPress( this.props.rowData ) }}
//WRONG TOO
onPress={this.props.onPress}
onLongPress={this.props.onLongPress}
>
<Text>
{rowData}
</Text>
</TouchableHighlight>
</View>
);
}
}
这里有一个关于这个问题的回购https://github.com/srlopez/test 提前致谢
【问题讨论】:
标签: android ios reactjs react-native redux