json React:将API数据从父组件中的状态传递到要Map的子组件

r7xajy2e  于 2023-11-20  发布在  React
关注(0)|答案(1)|浏览(110)

我是React的新手,每次我认为我理解状态时,我都会遇到问题,这是其中之一。我有一个父组件,它是一个窗体,该窗体有一个子组件,该子组件是一个选择。父窗体调用一个API并更新一个状态对象。我试图将其传递给子组件,然后运行map函数来获取数据并填充选择选项。目标是为了重用子组件,我尝试通过提供它所需的所有属性来使其动态化,其中两个属性是我希望为每个选项显示的键和值。我可以传递选择的所有属性,除了状态数据,键和我想要使用的值。它会返回告诉我“未捕获的错误:Object are not valid as a React child”,然后列出了API调用中的json键/值对。有人能解释一下我是如何做到这一点的吗?以及为什么会这样?我来自于JavaScript和基本HTML的背景,我自学了JS,现在是React,所以任何帮助都很感激。

Parent:(注意growerSelect是state对象,包含API返回数据)

<SelectComponent
                  selectedValue={growerValue}
                  setSelectedValue={setGrowerValue}
                  labelName="labelGrowers"
                  registerName="Grower"
                  title="Growers"
                  dataArray={growerSelect}
                  dataKey="companyid"
                  dataField="name"
                />

字符串

儿童:

import { useFormContext } from "react-hook-form";
import React, { useState } from "react";

export default function SelectComponent({
  selectedValue,
  setSelectedValue,
  labelName,
  registerName,
  title,
  dataArray,
  dataKey,
  dataField,
}) {
  const { register } = useFormContext();

  return (
    <div className="form-group">
      <label htmlFor={labelName} className="form-label mt-4">
        {title}
      </label>

      <select
        {...register(registerName, { required: true })}
        defaultValue={selectedValue}
        onChange={(e) => setSelectedValue(e.target.value)}
        className="form-select"
      >
        {/* <option>Please Select a Grower</option> */}
        {dataArray.map((data) => (
          <option key={data.dataKey} value={data.dataField}>
            {data}.{dataField}
          </option>
        ))}
      </select>
    </div>
  );
}

5lhxktic

5lhxktic1#

谢谢大家!!将它从{data}.{dataField}更改为{data[dataField]}成功了。我假设它有效的原因是,由于返回的数据是json key:value对,因此它被存储在数组中,因此[]必须读取它。这带来了另一个问题,有人有关于何时在react中使用{} vs()vs []的好参考吗?很多的如何视频和资源在那里,但我没有找到那些布局的差异或何时使用每一次清楚。理解是,当我想插入一个值或一段JS时,使用{},()用于表示函数或当我有多个{}要使用时,[]是一个数组。任何有助于定义这些功能的提示/资源都是受欢迎的,因为它们对JavaScript来说是陌生的,所以我没有简单的参考。再次感谢您,有一天,当我有更多的这一点下腰带,我希望能够帮助别人,但在此之前,我必须说,我很感谢React社区是如此欢迎一个明显的初学者。

相关问题