reactjs default选中多个Map按钮,需要单击两次才能呈现

wd2eg0qa  于 2022-12-18  发布在  React
关注(0)|答案(1)|浏览(119)

我正在Map多个按钮,并希望选择第一个按钮以在渲染时选中,该值将在渲染时显示
这是axios得到的

const [productData, setProductData] = useState([]);
const [size, setSize] = useState([]);
const [choice, setChoice] = useState("");

useEffect(() => {
const checkId = parseInt(window.location.href.slice(-1));
axios.get(`http://localhost:5000/products?id=${checkId}`)
.then((response) => {
setProductData(response.data[0]);
setSize(response.data[0].size);
setChoice(response.data[0].size[0].calories);
});
}, []);

这是按钮Map

const GetSize = () => {
    return size.map((val, i) => {
      return (
        <>
          <div>
            <input
              onClick={(e) => {
                setChoice(val.calories);
              }}
              defaultChecked={i == 0}
              type="radio"
            />
            <p>{val.option}</p>
            <p>{val.cup}</p>
          </div>
        </>
      );
    });
  };

必须在这里显示一个渲染值

<div >
     <h1>{choice === 0 ? "" : choice}</h1
    <div>
       <h1>Size options</h1>
    </div>
    <div >
       <form>
          <GetSize />
        </form>
    </div>
</div>


在渲染时,{choice}不显示,只在我单击单选按钮时显示。
如何使{choice}等待setChoice运行
而且,按钮需要单击两次才能呈现为选中,但单击按钮一次就足以使{choice}呈现

6l7fqoea

6l7fqoea1#

问题第一部分的可行解决办法

useEffect(() => {

   const checkId = parseInt(window.location.href.slice(-1));
   axios.get(`http://localhost:5000/products?id=${checkId}`)
   .then((response) => {
          setProductData(response.data?.[0] ?? []);
          const responseSize = response.data?.[0]?.size ?? []
          setSize(responseSize);
          // setting the default choice
          setChoice(responseSize.[0]?.calories ?? "")
   });

}, []);

相关问题