我有一个提供列表的新闻组件。
在该列表内有一个文本输入,其中有一个显示文本的文本字段。
我在News.js
中拥有这个组成部分:
renderItem({item}) {
return (
<Post
data={item}
onPressLike={this.onLikePost}
addLike={this.props.addLikesPost}
email={this.props.email}
postComment={this.props.postComment}
removeLike={this.props.removeLikesPost}
fullName={this.props.firstname + ' ' + this.props.lastname}
/>
);
}
<AnimatedFlatList
extraData={this.state}
data={_.values(this.props.posts)}
renderItem={this.renderItem.bind(this)}
keyExtractor={(item) => {
// console.log("Item", item.value.id);
return item.value.socialHash + "";
}}
backgroundColor='#edeaea'
style={{ paddingBottom: 7, }}
/>
然后我将其放在Post.js中:
class Post extends Component {
constructor(props) {
super(props);
this.child = React.createRef();
this.state = {
title: '',
post: '',
likes: 0,
userLiked: 0,
first_name: '',
last_name: '',
timestamp: null,
socialHash: 0,
comments: null,
id: null,
isVisible: false,
displayComments: false,
typedComment: '',
commentsText: '',
};
}
onCommentPress() {
this.props.data.value.comments[0].comments.push({
poster: this.props.fullName,
comment: this.state.typedComment,
key: Math.random() * 10 + "",
time_stamp: new Date()
})
this.setState({ commentsText: this.state.typedComment });
}
render() {
return (
<View >
<Text>{this.state.typedComment}</Text>
<View>
<Input
onChangeText={(typedComment) => {
console.log("Changing Input", typedComment);
this.setState({ typedComment });
}}
placeholder='Write a comment...'
/>
<Button
onPress={this.onCommentPress.bind(this)}>
<Icon name={"paper-plane"} size={20} />
</Button>
</View>
</View>
);
}
}
const mapStateToProps = (state) => {
const { commentText } = state.misc;
return {
commentText
};
};
// This helps us to bind our dispatch function to props
const mapDispatchToProps = dispatch =>
bindActionCreators(
{
...Games
},
dispatch
);
export default connect(mapStateToProps, mapDispatchToProps)(Post);
描述您期望发生的事情: 我希望post.js中的文本组件能够显示用户在输入框中输入的实时文本
答案 0 :(得分:0)
您希望FlatList的“数据”获得更新的视图“ this.props.data”。
this.props.data.value.comments[0].comments.push({
poster: this.props.fullName,
comment: this.state.typedComment,
key: Math.random() * 10 + "",
time_stamp: new Date()
})
但是props在反应中是只读的。 因此,您需要一个不同的解决方案来将您的状态传达给FlatList。 例如。调度动作(通过reducer更改状态)或通过props或其他方式使用回调函数。