回流状态更新不显示 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.
我正在为一个论坛使用 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.