![](/img/trans.png)
[英]I am trying to add a newline in input field by pressing enter key instead of submitting it
[英]Trying to enter a newline creates a comma instead
我正在尝试将一些逻辑集成到我的 Web 应用程序中,该应用程序是使用 React 编写的。 我有一个 textArea 组件,从 Semantic-UI 导入,我试图在其中提取每个新行并存储到一个数组中。 目前 textArea 组件仅将数据存储为字符串。
render() {
<Form.TextArea key={input.name} name={input.name} label={input.label} value={this.props.values[input.name] || ""} onChange={this.props.onChange}/>;
其中value
是由换行符分隔的字符串,例如:
test\\ntesting\\n123
我尝试使用下面的代码在每个新行上拆分,该代码将数据存储在一个数组中,就像我想要的那样。 但这正在取代我在 textArea 中用逗号创建新行 [按 ENTER] 的尝试,这不是我对 UX 的渴望。
value={this.props.values[input.name].split('\\n')
我的 textArea 组件最终看起来像这样:
test,testing,123
我想要的结果是这样的:
test
testing
123
如何在将每个新行存储在数组中的同时实现我想要的 textArea 组件用户体验? 非常感谢!
如果您只希望数组将其发送到 db 或存储在 localStorage 中,则不需要将其保持在 state 中。 保持正常的 textarea 值处于状态。
onChange={event => this.setState({ text: event.target.value}) }
当您想将其发送到 db 时,您可以将其转换为字符串数组
onSubmit: () => this.postToDb(this.state.text.split('\n'))
问题是您试图将类型array
值分配给string
道具。 我猜,在你的TextArea
组件数组中的某个地方转换成一个字符串。 由于Array.prototype.toString
方法返回一个表示由逗号连接的数组项的字符串,因此您有逗号分隔的字符串。 仅在将字符串发送到后端或用于其他逻辑目的时才需要拆分字符串,但对于TextArea
组件,最好保持原样。
很难说出您使用该数组的目的,这可能会影响答案。
最简单的方法是不将文本区域的内容存储为数组,而是将值存储为正常状态。 如果您需要将它作为数组发送到某个后端/数据库,则可以在发送数据时进行转换。 例如:
state = {
value: '',
};
...
onChange = (value) => this.setState({ value });
onSubmit = () => {
const myValueArray = this.state.value.split('\n');
// now make your network request with myValueArray
}
如果您确实需要处于状态的数组,一种解决方案可能是通过在调用 onChange 方法时设置两个状态项来简单地复制您的状态,例如
state = {
value: "", // this is the actual text box value with /n characters
valueArray: [], // this is your array where each newline is an item
};
...
onChange = (value) => {
this.setState({ value, valueArray: value.split('\n')} );
};
或者,您可以在数组传递给您的组件时将其加入。 .join() 方法将连接每个数组项,可选择在每个项之间插入一个字符串。 例如
<Form.TextArea ... value={this.props.values[input.name].join('\n')} />;
请注意,根据您的用例,这种方式可能会对性能产生负面影响
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.