根据儿童的状态变化更新平面清单

时间:2019-06-15 21:27:07

标签: javascript reactjs react-native

我有一个提供列表的新闻组件。

在该列表内有一个文本输入,其中有一个显示文本的文本字段。

我在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中的文本组件能够显示用户在输入框中输入的实时文本

1 个答案:

答案 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或其他方式使用回调函数。