javascript - 添加到状态而不覆盖其中已经存在的内容(React Native)
问题描述
我有多个文本输入来创建一个 4 位数的 OTP 条目。一旦填满,我显然希望将它们全部组合起来,向我展示最终的 OTP。示例:2 4 3 6
虽然每个数字都在不同的文本框中,但需要将它们组合起来,然后验证为 (2436)
我创建了一个名为的状态otpEntry: ''
,然后将其添加到所有四个文本框。问题是状态每次都被覆盖。相反,我想保持状态并添加下一个数字。例如,如果用户在移动到第二个框时输入 (2) 并输入 (4),则状态otpEntry
应该是 (24) 而不是 4。我尝试按照以下方式进行操作,但没有成功。
<TextInput
onChangeText={(otpEntry) => this.setState({otpEntry}), () => this.dig2.current.focus()}
style={styles.otpInput}
ref={this.dig1}
placeholder="X"
keyboardType="number-pad"
/>
<TextInput
onChangeText={(otpEntry) => { this.setState(prevState => ({ otpEntry: prevState.otpEntry.concat(otpEntry) })) }, () => this.dig3.current.focus()}
style={styles.otpInput}
ref={this.dig2}
autoFocus = {this.state.otpdig2}
placeholder="X"
keyboardType="number-pad"
/>
解决方案
当你不显示它们时,你应该避免使用它们。他们仍然会渲染并采取额外的处理能力。相反,您可以将其转换为函数。
const [state, setState] = useState();
function append(input){
let stateToChange = state;
stateToChange = stateToChange.toString().append(input);
setState(stateToChange);
}
如果此函数需要返回一个数字,您可以使用 parseInt() 和 parseFloat() 等函数。这是他们将要做什么的一个很好的例子:https ://gomakethings.com/converting-strings-to-numbers-with-vanilla-javascript/
编辑前的旧答案:
你应该能够做到这一点。
<TextInput
onChangeText={(text) => setState(text)}
value={state}
/>
onChangeText
返回文本框更改为的值,然后重新渲染组件。值在渲染时设置文本框。
推荐阅读
- angular - Settings statistics of users tracking at Angular 4
- python - 有没有一种简单的方法来解释必需参数和可选参数?Python
- vba - 为列中的值弹出 VBA 警报
- spring - Spring 5.x 中 ContextSingletonBeanFactoryLocator 的替代品是什么?
- spring - 休息时使用 post 或 delete 的哪个 crud 操作?
- r - Tidyverse unnest_tokens 在函数内部不起作用
- c - 如何更改文件的扩展名
- angular - TypeError:无法读取未定义的属性“indexOf”和无法读取未定义的属性“toLowerCase”
- c# - 在 IIS 上托管时使用 Google Vision OCR API 时出现问题
- ajax - 为什么表格不显示?