如果位于组件Material-UI中,则Textfield中的贴图函数不起作用

我有两个文本字段,第一个单选按钮工作,第二个单选按钮不工作.如果 map 功能位于单独的组件中使用单选按钮怎么办? 如果您try 替换第一个示例中的值,它将正确更改,而在第二个示例中则不起作用.唯一的区别是,在第二个示例中,映射是一个单独的文件

https://codesandbox.io/s/green-snow-bmbcn2?file=/src/Test.js enter image description here

import * as React from "react";
import Box from "@mui/material/Box";
import TextField from "@mui/material/TextField";
import MenuItem from "@mui/material/MenuItem";
import MapCastom from "./MapCastom";

const currencies = [
  {
    value: "USD",
    label: "$"
  },
  {
    value: "EUR",
    label: "€"
  },
  {
    value: "BTC",
    label: "฿"
  },
  {
    value: "JPY",
    label: "¥"
  }
];

export default function SelectTextFields() {
  return (
    <Box
      component="form"
      sx={{
        "& .MuiTextField-root": { m: 1, width: "25ch" }
      }}
      noValidate
      autoComplete="off"
    >
      <div>
        <TextField
          id="outlined-select-currency"
          select
          label="Select"
          defaultValue="EUR"
          helperText="Please select your currency"
        >
          {currencies.map((option) => (
            <MenuItem key={option.value} value={option.value}>
              {option.label}
            </MenuItem>
          ))}
        </TextField>
      </div>

      <div>
        <TextField
          id="outlined-select-currency"
          select
          label="Select"
          defaultValue="EUR"
          helperText="Please select your currency"
        >
          <MapCastom data={currencies} />
        </TextField>
      </div>
    </Box>
  );
}


import React from "react";
import MenuItem from "@mui/material/MenuItem";

const MapCastom = ({ data }) => {
  return (
    <>
      {data.map((option) => (
        <MenuItem key={option.value} value={option.value}>
          {option.label}
        </MenuItem>
      ))}
    </>
  );
};

export default MapCastom;

推荐答案

在这里,您很可能会遇到以下警告

梅:你提供了一个超出范围的

这意味着在第一次渲染时,SELECT VALUE看不到可能的选项.

解决这个问题的一种方法是不使用组件,因为您需要的是一个数组,这样您就可以用下面的函数替换MapCastom:

const MapCastom = (data) => {
  return data.map((option) => (
    <MenuItem key={option.value} value={option.value}>
      {option.label}
    </MenuItem>
  ));
};

并这样称呼它:

<TextField
  id="outlined-select-currency"
  select
  label="Select"
  defaultValue="EUR"
  helperText="Please select your currency"
>
  {MapCastom(currencies)}
</TextField>;

Reactjs相关问答推荐

props 可以在Reaction中锻造吗?

在Next.js中实现动态更改的服务器组件

在Reaction中的第一次装载时,Use Effect返回空数组

在任何渲染之前在ReactJs中获取数据

MUI 日期 Select 器 - 最小日期混乱

React 无效的钩子调用:如何避免嵌套钩子?

BrowserRouter改变了URL但没有链接到页面

redux 工具包使用中间件构建器函数时,必须返回一个中间件数组

图像路径很奇怪,部署 Next.js 应用程序后我看不到任何图像

从服务器获取数据时未定义,错误非法调用

如何处理页面加载时发生的 reactjs 错误?

在 Formik 表单中访问子组件的值

从 API 中提取映射数组后出现重复元素

父状态改变后子组件丢失状态

React Router 6.4CreateBrowserRouter子元素不显示

如何在自定义 JSX 元素上声明属性?

如何通过 Material Ui 设计将 Accordion 添加到您的 React 项目中?

RTK 查询 POST 方法不会改变数据

如何在按钮左下角制作 Material UI 菜单下拉菜单

material uireact ,如何从表格中删除阴影?试图找到 api 但找不到正确的属性