Javascript Can';无法在数组中保存对象

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

我有一个对象数组的状态,我想在里面保存复选框ID。以

[ 
 {
   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]) 

你能设置一个默认状态吗?你能设置一个默认状态吗?你说我不能依赖上面的函数,你会如何改变它,使它变得可靠?谢谢你说我不能依赖上面的函数,你会如何改变它,使它变得可靠?非常感谢。