gpt4 book ai didi

javascript - React-Native:无法访问状态值或从 renderRow 声明的任何方法

转载 作者:可可西里 更新时间:2023-11-01 04:21:56 25 4
gpt4 key购买 nike

我有一个 ListView ,每当用户点击一个项目时,我想用 onPress(可触摸突出显示)做一些事情。

我尝试定义函数然后在 onPress 中调用它们,但它们没有用。

首先我定义了一个这样的函数:

constructor(props) {
super(props);
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
}),
loaded: false,
};
this._dosome = this._dosome.bind(this);
}

_dosome(dd){
console.log(dd);
}

然后:

render(){
if (!this.state.loaded) {
return this.renderLoadingView();
}

return (
<View style={{
flex: 1
}}>
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow}
style={styles.listView}
/>
</View>
);
}

renderRow(data) {

var header = (
<View>
<View style={styles.rowContainer}>
<View style={styles.textContainer}>
<Text style={styles.title}>{data.nid}</Text>
<Text style={styles.description} numberOfLines={0}>{data.title}</Text>
</View>
</View>
<View style={styles.separator}></View>
</View>
);
///////////
var cid = [];
var content = [];
for(let x=0; x < Object.keys(data.course).length; x++){
cid[x] = data.course[x].course_id;
content.push(
<TouchableHighlight
underlayColor='#e3e0d7'
key={x}
onPress={ this._dosome } //// **** PROBLEM HERE ****
style={styles.child}
>
<Text style={styles.child}>
{data.course[x].title}
</Text>
</TouchableHighlight>
);
}
console.log(cid);
var clist = (
<View style={styles.rowContainer}>
{content}
</View>
);
////////////
return (
<Accordion
header={header}
content={clist}
easing="easeOutCubic"
/>
);
}


renderLoadingView() {
return (
<View style={styles.loading}>
<Text style={styles.loading}>
Loading Courses, please wait...
</Text>
</View>
);
}
}

但是没有成功,错误:

TypeError: Cannot read property '_dosome' of null(…)

我试过这样调用它:

onPress={ this._dosome.bind(this) }

没有帮助

onPress={ ()=> {this._dosome.bind(this)}}

没有帮助

onPress={ console.log(this.state.loaded)}

甚至我什至无法访问构造函数中定义的 Prop 。它不知道“这个”是什么!

我试过像这样用其他方式定义函数:

var _dosome = (dd) => {
console.log(dd);
};

我尝试在渲染之前、渲染之后、渲染内部、renderRow 内部和 renderRow 之后定义 _dosome。所有相同的结果。

我确实检查了很多教程、rnplay 上的很多示例应用程序、stackoverflow 中的很多线程、很多示例,但没有一个对我有用。任何解决方案/想法?非常感谢任何帮助。我现在正在为这个问题苦苦挣扎 2 天。提前致谢!

最佳答案

如何解决你的问题

改变

  <ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow}
style={styles.listView}
/>

  <ListView
dataSource={this.state.dataSource}
renderRow={data => this.renderRow(data)}
style={styles.listView}
/>

或者

  <ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}
style={styles.listView}
/>

为什么?

正如您已经知道的(因为您正试图通过使用箭头函数和bind 来解决问题),要调用renderRow,调用者应该在相同的上下文中作为组件本身。
但是这个连接在 renderRow={this.renderRow} 中丢失了,它创建了一个新函数(新上下文)。

关于javascript - React-Native:无法访问状态值或从 renderRow 声明的任何方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com