reactjs - 尝试在单独的组件中选择菜单项 - 如何解决 'function components cannot be given refs' 错误?

标签 reactjs material-ui

我正在尝试将选择字段中的菜单项移动到单独的组件,因为我必须两次使用相同的菜单项,这似乎是将它们移动到单独的组件的最佳方式。但它并没有像我期望的那样工作。

这很好用(因为它在同一个组件中):

<TextField
  select
  variant="outlined"
  fullWidth
  label="local menuitems"
  onChange={(e) => {
    console.log("Local running");
    setLocalValue(e.target.value);
  }}
  style={{ width: "100%" }}
  value={localValue}
>
    <MenuItem value="1">MenuItem 1</MenuItem>
    <MenuItem value="2">MenuItem 2</MenuItem>
    <MenuItem value="3">MenuItem 3</MenuItem>
</TextField> 

这不是(因为它是一个单独的组件):

<TextField
  select
  variant="outlined"
  fullWidth
  label="External menuitems"
  onChange={(e) => {
    console.log("External running");
    setExternalValue(e.target.value);
  }}
  style={{ width: "100%" }}
  value={externalValue}
>
    <MenuItems />
</TextField> 

MenuItems 返回:

<Fragment>
  <MenuItem value="1">MenuItem 1</MenuItem>
  <MenuItem value="2">MenuItem 2</MenuItem>
  <MenuItem value="3">MenuItem 3</MenuItem>
</Fragment>

我做了一个 CodePen https://codesandbox.io/s/infallible-wilson-u4so6?file=/src/App.js

第一个示例是在本地使用菜单项,第二个示例是在不同的组件中。菜单项显示正确但它们不起作用,我还注意到出现此错误

Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

正如 Omer 指出的那样,menuItems 需要是直接子项,所以我需要使用 forwardRef,现在我一般还没有使用 forwardRef 和 ref,那么在我的情况下我该如何使用它呢?如果您碰巧知道如果 MenuItems 组件使用 redux connect() 它将如何工作,那就太棒了!

最佳答案

在 Material-UI 中使用选择

我们必须送 child :

Material-UI: `children` must be passed when using the `TextField` component with `select`.

在文档中我们可以看到这一点——这意味着我们不能使用外部项目。 enter image description here

解决方案是使用 forwardRef(),但这不是一个好方法。

关于reactjs - 尝试在单独的组件中选择菜单项 - 如何解决 'function components cannot be given refs' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65111570/

相关文章:

javascript - React 切换按钮问题

javascript - Redux 与自定义钩子(Hook)

reactjs - 具有继承的对象分配在 typescript 中不起作用

javascript - 无法在 material-ui Button 组件中读取 null 的属性(读取 'pulsate')

reactjs - 如何更改 Material UI 中的选项卡宽度

javascript - 无法从 Github 的 GraphQL 渲染嵌套 Prop

javascript - React.js函数组件useState相关问题

reactjs - Material ui 图标的 React + Typescript 错误

css - MUI - 如何在特定样式的组件中使用伪类

material-ui - 带有 Material -ui的表单