Javascript Can';无法在数组中保存对象
我有一个对象数组的状态,我想在里面保存复选框ID。以Javascript Can';无法在数组中保存对象,javascript,reactjs,Javascript,Reactjs,我有一个对象数组的状态,我想在里面保存复选框ID。以 [ { name: 'Question 1', checked: '1,2' // so 1 and 2 was checked } ] 但在下面的代码中,当我取消选中复选框时,我的状态要么是空的对象数组,要么在数组中只包含一个对象 const { id, answer } = props.answers; const [answers, setAnswers] = useState([{}]); funct
[
{
name: 'Question 1',
checked: '1,2' // so 1 and 2 was checked
}
]
但在下面的代码中,当我取消选中复选框时,我的状态要么是空的对象数组,要么在数组中只包含一个对象
const { id, answer } = props.answers;
const [answers, setAnswers] = useState([{}]);
function handleChange(e) {
setAnswers([{ name: e.target.name, checked: e.target.value }]);
console.log(answers); // empty when i check checkbox, gets filled after unchecking
}
return (
<Answer>
<label>
<input
type="checkbox"
name={answer}
value={id}
defaultChecked={false}
onChange={handleChange}
/>
{answer}
</label>
</Answer>
);
}
const{id,answer}=props.answers;
const[answers,setAnswers]=useState([{}]);
功能手柄更改(e){
setAnswers([{name:e.target.name,选中:e.target.value}]);
console.log(answers);//选中复选框时为空,取消选中后填充
}
返回(
{答案}
);
}
useffect
将在答案
更改如下时重新运行:
import react, {useState, useEffect} from 'react';
const [answers, setAnswers] = useState([{}]);
handleChange = e =>{
setAnswers([{ name: e.target.name, checked: e.target.value }]);
}
useEffect(() => {
console.log(answers); //get the updated state here
}, [answers]);
如需了解更多信息,当
答案更改如下时,将重新运行useEffect
:
import react, {useState, useEffect} from 'react';
const [answers, setAnswers] = useState([{}]);
handleChange = e =>{
setAnswers([{ name: e.target.name, checked: e.target.value }]);
}
useEffect(() => {
console.log(answers); //get the updated state here
}, [answers]);
如需了解更多信息,请查看以下功能:
function handleChange(e) {
setAnswers([{ name: e.target.name, checked: e.target.value }]);
console.log(answers);
}
要访问新状态,这是因为setState
函数是异步的,因此您尝试console.log一个可能尚未设置的值。因此,您需要使用生命周期方法或useEffect挂钩,并将答案作为依赖项(第二个参数需要一个数组,如[answers]
)
useffect
在第一次渲染和每次渲染应答状态更改后运行
useEffect(() => {
console.log(answers) // get my new expected value of answers
}, [answers])
您不能依赖以下函数:
function handleChange(e) {
setAnswers([{ name: e.target.name, checked: e.target.value }]);
console.log(answers);
}
要访问新状态,这是因为setState
函数是异步的,因此您尝试console.log一个可能尚未设置的值。因此,您需要使用生命周期方法或useEffect挂钩,并将答案作为依赖项(第二个参数需要一个数组,如[answers]
)
useffect
在第一次渲染和每次渲染应答状态更改后运行
useEffect(() => {
console.log(answers) // get my new expected value of answers
}, [answers])
你能设置一个默认状态吗?你能设置一个默认状态吗?你说我不能依赖上面的函数,你会如何改变它,使它变得可靠?谢谢你说我不能依赖上面的函数,你会如何改变它,使它变得可靠?非常感谢。