gpt4 book ai didi

javascript - react js将对象添加到状态数组

转载 作者:行者123 更新时间:2023-11-29 23:08:33 26 4
gpt4 key购买 nike

在 React js 中测试一些东西,我的一些逻辑有一些问题。我试图从表单中的输入中获取值,然后在提交该表单时我想获取输入值的对象并将它们添加到我的 ctcList 数组中。我正在尝试使用 spread 的 es6 功能将我当前的 newCtc 状态与我的 ctcList 状态连接起来。当我控制台日志时,我得到了 newCtc 值,但是 ctcList 数组是空的。任何帮助表示赞赏。

谢谢!

import React, { Component } from 'react';
import Contact from './Contact';
import TestData from './TestData';


class ContactList extends Component {
constructor(props){
super(props);
this.state = {
name: '',
test1:'',
test2:'',
newCtc:{},
ctcList:[],
arr: []
}
}

async componentDidMount() {
try{
const result = await fetch('https://jsonplaceholder.typicode.com/users')
const data = await result.json()
this.setState({arr:data})

}catch(err){
console.log(err)
}
}


onChangeInput = (e)=>{
const target = e.target;
const name = target.name;
const value = target.value;
console.log(value)
this.setState({
[name]: value
});
}

newSubmit = (e) =>{
e.preventDefault();



this.setState(Object.assign(this.state.newCtc,{test1:this.state.test1, test2:this.state.test2}));


console.log(this.state.newCtc)

this.addContact();



this.clearInput();
console.log(this.state.newCtc);

}



addContact = ()=>{
this.setState({ ctcList:[ ...this.state.ctcList, this.state.newCtc] });
console.log(this.state.ctcList);
};




clearInput = ()=>{
this.setState({test1:'',test2:''});
this.setState(Object.assign(this.state.newCtc,{test1:'', test2:''}));
};

render() {


return (
<div>
<Contact firstName = {this.state.name} lastName='mcdaniel' phoneNumber = '585-721-3824' />
<input type = 'text' name = 'name' onChange = {this.onChangeInput}></input>

<TestData data={this.state.arr} />


<form onSubmit = {this.newSubmit}>

<input type='text' name={'test1'} value={this.state.test1} onChange = {this.onChangeInput}

/>
<input type='text' name={'test2'} value={this.state.test2} onChange = {this.onChangeInput}

/>
<button type='submit'> submit </button>
</form>

</div>
)
}
}
export default ContactList;

最佳答案

试试这个,注意setState的回调函数

import React, { Component } from 'react';



class ContactList extends Component {
constructor(props){
super(props);
this.state = {
name: '',
test1:'',
test2:'',
newCtc:{},
ctcList:[],
arr: []
}
}

async componentDidMount() {
try{
const result = await fetch('https://jsonplaceholder.typicode.com/users')
const data = await result.json()
this.setState({arr:data})

}catch(err){
console.log(err)
}
}


onChangeInput = (e)=>{
const target = e.target;
const name = target.name;
const value = target.value;

this.setState({
[name]: value
});
}

newSubmit = (e) =>{
e.preventDefault();

this.setState(Object.assign(this.state.newCtc,{test1:this.state.test1, test2:this.state.test2}), ()=>{
console.log('newctc', this.state.newCtc)
this.addContact();
});

}



addContact = ()=>{
let newCtcList = [...this.state.ctcList];
newCtcList.push({...this.state.newCtc});
console.log('newctc addcontact', this.state.newCtc);
console.log('newctclist',newCtcList);

this.setState({ ctcList: newCtcList }, ()=>{
console.log(this.state.ctcList);
this.clearInput();
});

};




clearInput = ()=>{
this.setState({test1:'',test2:''});
this.setState(Object.assign(this.state.newCtc,{test1:'', test2:''}));
};

render() {


return (
<div>

<input type = 'text' name = 'name' onChange = {this.onChangeInput}></input>



<form onSubmit = {this.newSubmit}>

<input type='text' name={'test1'} value={this.state.test1} onChange = {this.onChangeInput}

/>
<input type='text' name={'test2'} value={this.state.test2} onChange = {this.onChangeInput}

/>
<button type='submit'> submit </button>
</form>

</div>
)
}
}
export default ContactList;

关于javascript - react js将对象添加到状态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54319046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com