Javascript 不更新组件道具?

Javascript 不更新组件道具?,javascript,reactjs,Javascript,Reactjs,似乎我的组件道具没有按照我认为应该的方式更新 var AdditionalInfoBlock = React.createClass({ getInitialState: function() { return ({ comment: this.props.comment }); }, onCommentChange: function(e) { this.setState({comment: e

似乎我的组件道具没有按照我认为应该的方式更新

var AdditionalInfoBlock = React.createClass({

    getInitialState: function() {
        return ({
            comment: this.props.comment
        });
    },

    onCommentChange: function(e) {
        this.setState({comment: e.target.value});
        this.props.onCommentChange(e);
    },

    render: function() {
        return (
            <ToolBlock>
                <div className="container">
                    <form>
                        <textarea value={this.props.comment} onChange={this.onCommentChange} />
                    </form>
                </div>
            </ToolBlock>
        );
    }
};

var MainTool = React.createClass({

    getInitialState: function () {
        return {
            comment: undefined
        };
    },

    restart: function (e) {
        e && e.preventDefault && e.preventDefault();
        this.setState(this.getInitialState());
    },

    onCommentChange: function(e) {
        this.setState({
            comment: e.target.value
        });
    },

    render: function() {
        return (
            <div>
                <AdditionalInfoBlock comment={this.state.comment}
                                     onCommentChange={this.onCommentChange} />
            </div>
        );
    }
};
我希望这段代码基本上保持注释的值,直到我发布它并调用restart,然后它应该在AdditionalInfoBlock和MainTool中重置该值。在调用restart之后,当I console.log记录MainTool的状态时,注释值未定义。但是,如果我记录了AdditionalInfoBlock状态和/或道具,则注释值不会在这两种状态中重置


这显然是代码的一个简短版本,希望只包含相关的位。尽管在本摘录中没有调用restart,但这并不意味着我忘记调用它:

因为您在组件MainTool和AdditionalInfoBlock上处理相同的状态,所以查找注释的值可能会让人困惑。在侦听注释更改时,您正在设置两个组件的状态

父组件MainTool中的更改状态正在将道具传递给子AdditionalInfoBlock。getInitialState在装载之前调用一次。因此,子组件在后续更新时不会处理传递的属性。通过使用componentWillReceiveProps,您将能够处理MainTool发送的道具


工作代码:

因为您在组件MainTool和AdditionalInfoBlock上处理相同的状态,所以查找注释的值可能会令人困惑。在侦听注释更改时,您正在设置两个组件的状态

父组件MainTool中的更改状态正在将道具传递给子AdditionalInfoBlock。getInitialState在装载之前调用一次。因此,子组件在后续更新时不会处理传递的属性。通过使用componentWillReceiveProps,您将能够处理MainTool发送的道具


工作代码:

尝试访问componentDidUpdate中的状态,而不是在设置状态之后才访问它。我没有完全听懂,你能详细说明这将如何解决我的问题吗?主要的问题是,在这个.props.comment中返回以前的prop值,尽管在父对象中分配了一个新的prop值,但它应该返回undefined,但返回调用restart之前的值。我只是被太多处理相同状态的组件弄糊涂了。我不认为textbox value属性接受undefined作为参数,请尝试将initialState设置为空字符串,或者在重新启动方法中,使用this.setState{comment:};在发布之前已经尝试过了,但正如在原始帖子中所述,问题出在其他地方-console.logthis.state.props也不会返回未定义的值,而是返回以前的值。请尝试访问componentDidUpdate中的状态,而不是完全在设置状态之后访问它。我没有完全听懂,你能详细说明这将如何解决我的问题吗?主要的问题是,在这个.props.comment中返回以前的prop值,尽管在父对象中分配了一个新的prop值,但它应该返回undefined,但返回调用restart之前的值。我只是被太多处理相同状态的组件弄糊涂了。我不认为textbox value属性接受undefined作为参数,请尝试将initialState设置为空字符串,或者在重新启动方法中,使用this.setState{comment:};在发布之前已经尝试过了,但正如在原始帖子中所述,问题出在其他地方-console.logthis.state.props也不会返回未定义的值,而是之前的值。令人惊讶,非常有用,奇怪的是,在几个相同的线程中,我没有找到这个答案,谢谢,非常有用,奇怪的是,在几个相同的线程中,我没有找到这个答案,谢谢
var AdditionalInfoBlock = React.createClass({
    ...

    componentWillReceiveProps(nextProps) {
            this.setState({comment: nextProps.comment});
    },