我的组件中有一个LisView,如下所示:
class Test extends Component {
constructor(props) {
super(props);
const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
this.state = {
dataSource: ds.cloneWithRows(this.props.dataSource),
};
}
componentWillReceiveProps(nextProps) {
if (this.props.dataSource !== nextProps.dataSource) {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(nextProps.dataSource),
});
}
}
onPressRow(key) {
console.log(key);
}
getListView() {
if (this.props.isLoading) {
return (
<ActivityIndicator
animating
size={'small'}
style={styles.spinner}
color={this.props.activityIndicatorColor}
/>
);
}
return (
<ListView
style={styles.listView}
keyboardShouldPersistTaps
keyboardDismissMode="on-drag"
enableEmptySections
dataSource={this.state.dataSource}
renderRow={this.renderRow}
automaticallyAdjustContentInsets={false}
/>
);
}
renderRow(rowData) {
return (
<View
style={styles.listButton}
>
<TouchableHighlight
style={styles.button}
onPress={() => this.onPressRow(rowData)}
>
<Text>
{rowData.description}
</Text>
</TouchableHighlight>
</View>
);
}
render() {
return (
<View>
<View>
// TEXTINPUT
</View>
{this.getListView()}
</View>
);
}
}
export default Test;
当我点击一行时,我想执行一个函数,但我有这个错误:
_this2.onPressRow不是函数
为什么我无法阅读该功能?我必须把它当成道具?
答案 0 :(得分:0)
如果您使用renderRow={this.renderRow.bind(this)}
,则所有呼叫都会自动绑定,但在使用super()
的ES6方法时,您必须绑定所有功能。
您可以使用
进行内联this.renderRow = this.renderRow.bind(this);
或者,您可以在ul {
font-family: Arial;
}
<ul class="nav navbar-nav pull-right">
<li><a href="#"><span class="glyphicon glyphicon-user"> My Account</a></li>
</ul>
:
{{1}}
我个人喜欢这种方法,因为我觉得这段代码更容易阅读。
有关ES6方式的更多信息,请查看this link。