回流状态更新不显示 textarea 的默认值的变化?

Reflux state update not showing change of defaultValue of textarea?

我正在为一个论坛使用 Reflux,我正在努力做到这一点,以便用户可以 select 一个要写入的类别,然后填写一个模板。

为此,我为 onChange 下拉菜单设置了一个 setCategory 函数,它设置状态并因此重新呈现表单。

<Categories onChange={this.setCategory} value={this.state.category} />
// where setCategory is a function which sets the state
// to the selected category.

表格是这样写的:

<textarea id='content' defaultValue={this.placeholder()}></textarea>

其中占位符是一个函数,returns 应该插入文本区域的数据:

placeholder: function() {
    if (this.state.category == 'ban-appeals'){
        return ('text here...');
    } // ...
}

但是,我 运行 遇到的问题是:当 textarea 重新呈现时,框内的文本与最初开始的文本没有变化。我希望它清空框并根据类别在文本中进行设置,但框不会从最初提供给它的 "placeholder" 文本改变。

那么,有没有办法在更改页面状态时更新文本区域的默认值?


我最好的猜测是 defaultValue 仅在首次创建文本区域框时才被考虑 - 因此,当我们更改状态时,也许该框认为它已经 'initialized' 因此没有不更新该值,因为它只是默认值,只有在初始化框时才会设置?

我尝试将 defaultValue 属性更改为普通 value(如 <textarea value={this.placeholder()}>...),但这给了我来自 javascript 的错误:

Warning: Failed propType: You provided a `value` prop to a form field without an `onChange` handler. 
This will render a read-only field. If the field should be mutable use `defaultValue`. 
Otherwise, set either `onChange` or `readOnly`. Check the render method of `exports`.

此外,当我 select 带有占位符文本的类别时,该框不可编辑。

我也尝试将 {this.placeholder()} 调用放在 textarea 标记中(如 <textarea>{this.placeholder()}</textarea>),但这导致 textarea 在更改类别。

我知道表单肯定会再次呈现,因为我可以在 render 函数的顶部放置一个 console.log 调用,该函数定义了 textarea,并在每个类别的变化时打印。

那么,我怎样做才能在更改类别时更改框的值,同时仍允许用户编辑它?

谢谢。

请尝试:

<textarea id='content' value={this.placeholder()}></textarea>

React 规范说:

in HTML, the value of is set via children. In React, you should use value instead.

https://facebook.github.io/react/docs/forms.html