Reactjs TextArea对象是只读的而不是可变的

时间:2017-05-27 13:40:18

标签: javascript reactjs

我有一个TextArea对象,不允许输入新文本。最初我在没有构造函数的情况下尝试了这个,但是当我尝试调用我的on change方法时会得到区域,因为它没有绑定到this。添加构造函数以绑定onChange方法不允许我输入文本。

        class TextAreaCounter extends React.Component{
            constructor(props) {
                super(props);
                this._textChange = this._textChange.bind(this);
            }
            getInitialState() {
                return {
                    text: this.props.text,
                };
            }
            _textChange(ev) {
                this.setState({
                    text: ev.target.value,
                });
            }
            render() {
                return React.DOM.div(null,
                    React.DOM.textarea({
                        value: this.props.text,
                        onChange: this._textChange,
                    }),
                    React.DOM.h3(null, this.props.text.length)
                );
            }
        }
        TextAreaCounter.PropTypes = {
            text: React.PropTypes.string,
        }
        TextAreaCounter.defaultProps = {
            text: '',
        }
        ReactDOM.render(
            React.createElement(TextAreaCounter, {
                text: "billy",
            }),
            document.getElementById("app")
        );

2 个答案:

答案 0 :(得分:1)

我找到了答案!

首先,我在render方法中使用this.props而不是this.state。所以,我的onChange方法被调用但从未实际更新过。

其次,不推荐使用getIntialState,因此我更新为构造函数中的状态对象。

       class TextAreaCounter extends React.Component{
            constructor(props) {
                super(props);
                this._textChange = this._textChange.bind(this);
                this.state = {
                    text: this.props.text,
                };
            }
            _textChange(ev) {
                this.setState({
                    text: ev.target.value,
                });
            }
            render() {
                return React.DOM.div(null,
                    React.DOM.textarea({
                        value: this.state.text,
                        onChange: this._textChange,
                    }),
                    React.DOM.h3(null, this.state.text.length)
                );
            }
        }

答案 1 :(得分:0)

您应该将this.state.text作为值传递给textarea而不是this.props.text。