javascript - setState 如何在索引中排列?反应式
问题描述
我有一个数组:
constructor() {
super();
this.state = {
title: "",
content: ["",""],
note_number: "",
fetch_notes: "",
img: "",
}
}
所以在这里我将值设置为数组:
const {params} = this.props.navigation.state;
this.setState({title: params.data.title});
let array_notes = this.state.content.slice();
array_notes[0] = params.data.content;
this.setState({content: array_notes});
this.setState({note_number: params.note_number});
this.setState({fetch_notes: params.fetch_notes});
如您所见,我使用 slice 方法创建了一个新变量,这将创建原始数组的副本,并且索引为零,我告诉他在该索引中存储内容(字符串)插入内容,问题是在这里,我在索引 1 中打印数组,该数组应该为空,但它的值与索引 0 相同,我认为它的原因是 onchangetext 方法,即:
<View style = {this.styles.textinput_container}>
<TextInput style = {this.styles.TextInput_title} placeholder = "Title" multiline = {true} maxLength = {80} value = {this.state.title} onChangeText = {title => this.setState({title: title})}></TextInput>
<TextInput placeholder = "Content" multiline = {true} value = {this.state.content[0]} onChangeText = {text => this.setState(({content:[text,this.state.content[0]]}))}></TextInput>
<Text>{this.state.content[1]}</Text>
</View>
Onchangetext 函数:
text => this.setState(({content:[text,this.state.content[0]]}));
我不太了解这段代码,因为一个人把它传给了我,但它应该只存储在零位置,为什么当我打印它时
<Text>{this.state.content[1]</Text>
索引 1 获得与零相同的值?
解决方案
你的功能
text => this.setState(({ content: [text, this.state.content[0]] }));
是设置this.state.content
到一个数组,其中第 0 个索引等于text
并且第一个索引等于,this.state.content[0]
即之前第 0 个索引中的任何内容
如果您希望数组只有一个值,即您可以执行的第 0 个索引
text => this.setState(({ content: [text]] }));
如果要text
替换 的第 0 个索引this.state.content
,可以执行
text => this.setState(state => ({ content: [text, ...state.content.slice(1) ]]}));
编辑:
如果你想更新任意索引,你可以像这样创建一个通用的更新函数
const setIndex = (vals, i, v) => [
...vals.slice(0, i),
v,
...vals.slice(i+1)
];
并像这样使用它,
text => this.setState(state => ({ content: setIndex(state.content, 0, text) }));
推荐阅读
- spring-mvc - 将 UNICODE 字符转换为通过 Spring MVC @ResponseBody 返回的 JSON 字符串中的 HTML 实体
- hashmap - 拆分地图
进入列表 - r - 从两个数据框制作一个列表并将该列表放在一列中
- wordpress - 将自定义注册块导入古腾堡中的另一个自定义块
- c - 如何确保没有人可以访问我的网络服务器中文档根目录中的文件
- javascript - 在 Azure DevOps Pipeline 中运行时,Angular/Protractor E2E 测试失败。在当地通过
- xamarin - 如何将所有 Switch 更改为 true 到 ListView?
- django - 设置一些使用 Django Rest Framework API 的视图
- python - 如何使用 CVXPY 设置限制时间
- javascript - 当元素阻止光标消失时,React onMouseEnter 不会在 Chrome 中触发