material-ui v4.11.1 - 不能为功能组件提供参考。尝试访问此引用将失败。你的意思是使用 React.forwardRef() 吗?

时间:2021-06-16 07:07:54

标签: reactjs material-ui react-forwardref

因此,我们从 material.ui 中实现了 Modal,并且我们尝试根据作为 props 传入的内容在 modal 内安装不同的组件。执行此操作后,我们收到错误消息“无法为函数组件提供 refs。尝试访问此 ref 将失败。您是要使用 React.forwardRef() 吗?”。

我们试图了解如何使用 React.forwardRef() - 我们已经阅读了这个线程例如 (How can I use forwardRef() in React?) - 但无法真正理解如何在我们的代码中具体实现它.

非常感谢您对我们如何实现 React.forwardRef() 以消除错误的帮助。

这是我们的代码(模态)

const useStyles = makeStyles(() => ({
  backdropModal: {
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center'
  }
}))

const ModalContainer = ({ component, editMode, setEditMode }) => {
  const classes = useStyles()

  return (
    <Modal
      open={editMode}
      onBackdropClick={() => setEditMode(false)}
      className={classes.backdropModal}
    >
      {component}
    </Modal>
  )
}

这是我们安装 Modal 的地方

      <ModalContainer 
        editMode={editMode}
        setEditMode={setEditMode}
        component={
          <EditTask
            item={item} 
            setEditMode={setEditMode}
          />
        }
      />

这是 EditTask 组件

    <EditTaskForm>
      <SubContainer>
        <InputField 
          id="input-task-title"
          label="Task title"
          type="text" 
          value={taskTitle} 
          handleChange={setTaskTitle} 
        />
        <InputField 
          id="input-task-description"
          label="Description"
          type="text" 
          multiline={true}
          value={taskDesc} 
          handleChange={setTaskDesc} 
        />
        <InputField 
          id="input-task-comments"
          label="Comments"
          type="text" 
          multiline={true}
          value={taskComments} 
          handleChange={setTaskComments} 
        />
      </SubContainer>
      <ButtonsContainer>
        <SaveButton 
          type="button"
          onClick={handleFormSubmit}
        >
          SAVE
        </SaveButton>
        <CancelButton onClick={() => setEditMode(false)}>CANCEL</CancelButton>
      </ButtonsContainer>
    </EditTaskForm>

0 个答案:

没有答案