React Native 将 Firebase 对象传递到下一页 - React Navigation
React Native Pass Firebase Object To Next Page - React Navigation
我在 React Native ListView 中有一个 firebase 对象列表。请看下面的代码。
正在从 Firebase 导入数据:
getDataForFeed() {
var feedPosts = this;
firebase
.database()
.ref("/feedPosts/")
.limitToLast(10)
.orderByChild('sortingTime')
.on("child_added", function(data) {
var newData = [...feedPosts.state.listViewData];
newData.push(data);
feedPosts.setState({ listViewData: newData });
});
}
渲染数据:
<ListView
enableEmptySections
dataSource={this.ds.cloneWithRows(this.state.listViewData)}
renderRow={data => (
<Card style={{ flex: 0 }}>
<CardItem
button
onPress={data => {
this.props.navigation.navigate("ViewPost", {
subject: data.val().subject //This doesn't work.
});
}}
>
<Body>
<Text small>
{data.val().subject} //This works.
</Text>
</Body>
</CardItem>
</Card>
)}
/>
当我在 "subject" 值中放入一个字符串或整数时,它工作正常,但是当我想要我需要的值时,data.val().subject - 它会抛出这个错误。
data.val is not a function.
在下面的文本框中,data.val().subject 显示得很好。
请帮助我将其转换为正确的格式,以便我将其传递到下一页。
好的。我是这样做的:
我是这样导入数据的:
getDataForFeed() {
var feedPosts = this;
firebase
.database()
.ref("/feedPosts/")
.limitToLast(10)
.orderByChild('sortingTime')
.on("child_added", function(data) {
var newData = [...feedPosts.state.listViewData];
newData.push(data);
feedPosts.setState({ listViewData: newData });
});
}
我制作了一个单独的 renderRow 函数,而不是内联:
renderRow(data) {
const { navigate } = this.props.navigation;
return (
<Card style={{ flex: 0 }}>
<CardItem
button
onPress={() => {
navigate("ViewPost", data.val());
}
}
bordered
>
</CardItem>
</Card>
);
}
然后我将列表渲染成这样:
<ListView
enableEmptySections
dataSource={this.ds.cloneWithRows(this.state.listViewData)}
renderRow={this.renderRow.bind(this)}
/>
然后,在下一页,数据是这样访问的:
console.log(this.props.navigation.state.params, "Navigation");
希望对您有所帮助。如果您需要任何说明,请发表评论。
我在 React Native ListView 中有一个 firebase 对象列表。请看下面的代码。
正在从 Firebase 导入数据:
getDataForFeed() {
var feedPosts = this;
firebase
.database()
.ref("/feedPosts/")
.limitToLast(10)
.orderByChild('sortingTime')
.on("child_added", function(data) {
var newData = [...feedPosts.state.listViewData];
newData.push(data);
feedPosts.setState({ listViewData: newData });
});
}
渲染数据:
<ListView
enableEmptySections
dataSource={this.ds.cloneWithRows(this.state.listViewData)}
renderRow={data => (
<Card style={{ flex: 0 }}>
<CardItem
button
onPress={data => {
this.props.navigation.navigate("ViewPost", {
subject: data.val().subject //This doesn't work.
});
}}
>
<Body>
<Text small>
{data.val().subject} //This works.
</Text>
</Body>
</CardItem>
</Card>
)}
/>
当我在 "subject" 值中放入一个字符串或整数时,它工作正常,但是当我想要我需要的值时,data.val().subject - 它会抛出这个错误。
data.val is not a function.
在下面的文本框中,data.val().subject 显示得很好。
请帮助我将其转换为正确的格式,以便我将其传递到下一页。
好的。我是这样做的:
我是这样导入数据的:
getDataForFeed() {
var feedPosts = this;
firebase
.database()
.ref("/feedPosts/")
.limitToLast(10)
.orderByChild('sortingTime')
.on("child_added", function(data) {
var newData = [...feedPosts.state.listViewData];
newData.push(data);
feedPosts.setState({ listViewData: newData });
});
}
我制作了一个单独的 renderRow 函数,而不是内联:
renderRow(data) {
const { navigate } = this.props.navigation;
return (
<Card style={{ flex: 0 }}>
<CardItem
button
onPress={() => {
navigate("ViewPost", data.val());
}
}
bordered
>
</CardItem>
</Card>
);
}
然后我将列表渲染成这样:
<ListView
enableEmptySections
dataSource={this.ds.cloneWithRows(this.state.listViewData)}
renderRow={this.renderRow.bind(this)}
/>
然后,在下一页,数据是这样访问的:
console.log(this.props.navigation.state.params, "Navigation");
希望对您有所帮助。如果您需要任何说明,请发表评论。