javascript - 如何管理未知数量文本区域的状态?
问题描述
我已经使用了 map 函数并将值分配给textarea
using 值,并且还尝试使用defaultValue
.
但是,如果我使用 value,那么我无法更改 onChange 函数中的值,如果我使用 defaultValue,那么其他值会出现相同的值。
// Update value
this.props.values.map((item: any) => (<TextArea onChange={this.handleChange} value={item.val}/>))
// Update defaultValue
this.props.values.map((item: any) => (<TextArea onChange={this.handleChange} defaultValue={item.val}/>))
如果需要,我希望将textarea
值更改为新值。
解决方案
您需要管理映射的每个组件的值状态。Input
从理论上讲,您希望将N
状态设置为N
区域文本框,这是一种管理包含所有状态的单个对象的方法。
答案是用钩子写的,很容易用类组件制作等价的。
// props.values
const VALUES = ["Hello", "World", "All Texts Areas Managed"];
function TextAreaManager() {
// We will manage text box i
const [valuesManager, setValuesManager] = useState([...VALUES]);
return (
{VALUES.map((value, i) => (
<TextBoxItem
key={i}
value={valuesManager[i]}
onChange={e => {
// Update the value of text box i on next render.
valuesManager[i] = e.target.value;
// Render with new value of text box i.
setValuesManager([...valuesManager]);
}}
/>
))}
);
}
演示:
推荐阅读
- algorithm - 有多少数字同时被响铃和交叉?
- apache-spark - 纱线客户端:用户类抛出异常:java.lang.NoClassDefFoundError:org/apache/spark/sql/DataFrame
- python - 如何取消挂起的 wait_for
- c# - [Computed] 和 [Write(false)] 属性有什么区别?
- entity-framework - EF Core 2.1 在 Sum complex 和 Grouping 时在本地进行评估
- excel - 如何根据来自更多列的信息对 Excel 数据透视行进行排序
- vba - 将 Outlook 升级到 64 位,VBA 代码不再有效
- powershell - powershell脚本中变量的长度
- javascript - 使用 Moment.js 只获取未来的日子
- regex - 如何创建从第一个字符开始的正则表达式模式?