Javascript RN Listview将每个字符作为给定json字符串的一行
我在其他项目中使用过Listview,只是从那里复制了代码,但现在有一个问题我不知道如何解决 我从服务器获取了以下json,并将其存储在我的会话类中,我将其用作数据源,但渲染行不将对象作为行项目,而是将每个字符作为新行项目,我在调试过程中已对其进行了检查。使用以下代码,任何帮助都将不胜感激 JSON 代码Javascript RN Listview将每个字符作为给定json字符串的一行,javascript,android,reactjs,listview,react-native,Javascript,Android,Reactjs,Listview,React Native,我在其他项目中使用过Listview,只是从那里复制了代码,但现在有一个问题我不知道如何解决 我从服务器获取了以下json,并将其存储在我的会话类中,我将其用作数据源,但渲染行不将对象作为行项目,而是将每个字符作为新行项目,我在调试过程中已对其进行了检查。使用以下代码,任何帮助都将不胜感激 JSON 代码 构造函数(道具){ 超级(道具); const ds=new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!==r2}); var功能成员; i
构造函数(道具){
超级(道具);
const ds=new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!==r2});
var功能成员;
if(SessionManager.getSessionValue(Constants.FACULTY_MEMBERS)!==null){
facultyMembers=SessionManager.getSessionValue(Constants.FACULTY\u MEMBERS);
}
此.state={
数据源:ds.cloneWithRows(facultyMembers)
};
}
render(){
返回(
this.renderRow(行)}
renderHeader={this.state.showHeader?()=>this.renderHeader(this.state.headerText):()=>{
}}
RenderParator={(sectionId,rowId)=>}
/>
);
}
renderRow=(行数据)=>(
{
this.state.onPress(rowData)
}}>
{rowData.fullName}
);
在renderRow的第一次迭代中,我得到了[
在第二秒钟,我得到了{
在第三节中,我得到了“
等等
根据@MattAft和@Garrett McCullough的说法,我没有将字符串解析回JSON,因为我希望我已经得到了JSON 因此,这个简单的解决方案是有效的
ds.cloneWithRows(JSON.parse(facultyMembers))
将字符串传递到
cloneWithRows
将导致该问题。您确定解析了来自服务器的JSON响应吗?是的,我从服务器获得了有效的JSON,在收到响应后,我重新检查并应用了resp.JSON(),我同意@GarrettMcCullough的说法,您可能只需要执行数据源:ds.cloneWithRows(JSON.parse(facultyMembers))
在你的州。ohh是的Thnx很多先生你们两个,我想我不明白到底发生了什么,我得到的字符串不是JSON吗?在服务器端,我使用objectmapper.writeValueAsString(hashmap)…如果您能在@MattAftThe函数名下对其进行lil bit解释,writeValueAsString
发出的声音听起来像是服务器在发送字符串。ListView的结果看起来像是得到了一个字符串。因此,我会说要么您没有将字符串解析为JSON,要么您没有存储JSON,而是错误地存储了字符串。我如果不知道SessionManager.getSessionValue正在做什么,就很难知道。我找不到该库/函数,所以我猜它是自定义的
constructor(props) {
super(props);
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
var facultyMembers;
if(SessionManager.getSessionValue(Constants.FACULTY_MEMBERS) !== null){
facultyMembers = SessionManager.getSessionValue(Constants.FACULTY_MEMBERS);
}
this.state = {
dataSource: ds.cloneWithRows(facultyMembers)
};
}
render() {
return (
<View style={styles.container}>
<ListView
style={styles.listviewcontainer}
dataSource={this.state.dataSource}
renderRow={(row) => this.renderRow(row)}
renderHeader={this.state.showHeader ? () => this.renderHeader(this.state.headerText) : () => {
}}
renderSeparator={(sectionId, rowId) => <View key={rowId} style={styles.separator}/>}
/>
</View>
);
}
renderRow = (rowData) => (
<TouchableHighlight underlayColor='gainsboro' onPress={() => {
this.state.onPress(rowData)
}}>
<View style={styles.row}>
<Text style={styles.header}>
{rowData.fullName}
</Text>
</View>
</TouchableHighlight>
);
ds.cloneWithRows(JSON.parse(facultyMembers))