当前位置: 首页 > 知识库问答 >
问题:

react-映射数组对象并传递到react-Select[重复]中的选项prop

陈俊郎
2023-03-14

我正在尝试映射一组对象,并使用name键将其传递给react select中的options prop。我可以用常规JS来做这个吗?我试图结合这个例子。

我的模拟数据

    mock.onGet("/dataschemas").reply(200, {
  data: [
    {
      id: "2147483599",
      selfUri: "/dataschemas/2147483599",
      name: "Book Catalog"
    },
    {
      id: "2147483600",
      selfUri: "/dataschemas/2147483600",
      name: "Business Articles"
    },
    {
      id: "2147483602",
      selfUri: "/dataschemas/2147483602",
      name: "Phone Data"
    }
  ]
});

cDM中,我用响应更新状态,并将其存储模式

  componentDidMount() {
    axios.get("/dataschemas").then(function(response) {
      console.log(response.data.data);
      this.setState({
        schemas: response.data.data
      });
      console.log(this.state.schemas);
    });
  }

然后在我的选择组件中,我将模式设置为选项属性,并映射到属性中的模式

<Select
  id="color"
  options={this.state.schemas}
  isMulti={false}
  value={this.state.schemas.filter(
    ({ name }) => name === this.state.name
  )}
  getOptionLabel={({ name }) => name}
  getOptionValue={({ id }) => id}
  onChange={({ value }) => this.setState({ name: value })}
  onBlur={this.handleBlur}
/>

在我的codesandbox示例中,我似乎无法在props中获得正确的值,以在下拉选择中显示数据集名称

有关与此问题相关的react select文档的详细信息


共有3个答案

华炜
2023-03-14

您正试图从响应函数范围内访问状态。将您的componentDidMount更改为:

async componentDidMount() {
  const response = await axios.get("/dataschemas");
  if (response.data && response.data.data) {
    this.setState({ schemas: response.data.data });
  }
}
莘绍元
2023-03-14

这是一个工作代码沙盒

问题似乎是您使用的是函数语法而不是胖箭头语法,因此绑定不正确,因此未定义this.setState

有关函数和胖箭头语法之间差异的更多信息,请参见此处

这是怎么运作的?我喜欢把它想象成胖箭头函数没有自己的或者不改变“这个”的上下文。他们让它保持独立,以便它与创建函数的上下文保持相同。

对于调试类似这样的未来问题,我建议从查看javascript控制台错误开始——最初的提示是this.setState未定义的错误

赵开诚
2023-03-14

<代码>

this.state.schemas.filter(
  ({ name }) => name === this.state.name
)

对数组调用.filter,将返回另一个数组。因此,您将数组传递给,而不是单个对象。只需添加一个[0]即可展开阵列:

this.state.schemas.filter(
  ({ name }) => name === this.state.name
)[0]

或者使用. search来代替:

this.state.schemas.find(
  ({ name }) => name === this.state.name
)
 类似资料:
  • 我使用.map()函数的方式与在其他项目中完全相同,但在我当前正在处理的项目中,它向我抛出了一个错误:这是我的代码(正如我提到的,它的结构在其他项目中也适用): 我想知道这是否与我在从外部库导入的组件内部进行映射有关。

  • 问题内容: 我是React JS的新手,问题是我需要在这段代码中显示数据库中的所有字段。我已经能够在浏览器控制台中将所有数据作为对象获取,并且能够在浏览器中查看数组中的最后一条数据,但无法查看它们。请原谅我代码中的格式错误,这是我的新知识。在此先感谢..... 输出和代码 浏览器视图:Lands of Toys Inc.是名称131是ID JSON数据: 这些数据是通过以插件形式编写的PHP代码获

  • 我有一个mongodb文档,我正在使用axios ajax调用来提取它。文档有一个对象数组,其中还包含一个嵌套的对象数组。每个对象都分配了一个mongo id。最顶端的数据显示在相应的最顶端的表示组件中,但对象的后续阵列不会显示在其相对表示组件中。我得到的错误是。“TypeError:this.props.card.rdfts未定义”,但会显示它的非数组同级。然而,当我查看react-dev工具和

  • 我想获取一个Javascript对象并将其转换为哈希数组。 以下操作仅获取对象的一个元素并将其转换为数组: 返回: 但是,当我试图创建散列元素来组成数组时,出现了一个错误: 返回: 我做错了什么?

  • 在一个DOM操作练习中,我学习了如何使用纯JavaScript创建HTML元素。也就是像这样的东西: 我必须创建一个函数,允许用户将对象作为参数传入,以设置元素的属性。这个对象包含任意数量的键(属性)和值(属性值)。即属性可以是“src”,值可以是“image.jpg”。类似的东西。用户可以在调用函数时向此对象传递任意多的属性。 附带说明,对代码和JS都很新,请原谅我:P

  • React 的props传递是否只能传递对象,而不能传递数组? 我有如下的数组数据: 传递数据到: 我在组件内接受的时候,会变成对象: 所以,是否React 的props传递是否只能传递对象,而不能传递数组?如果想要传递数组应该怎么传递呢?对treeData 进一步封装是吗?