【发布时间】:2022-10-22 17:29:24
【问题描述】:
我正在使用 MUI + React Hook Form 的组合,所以我创建了一个CustomTextField.tsx 组件来使其工作。
// CustomTextField.tsx
import { TextField } from "@mui/material";
export default function CustomTextField(props: any) {
return (
<Controller
name={props.name}
control={props.control}
render={({
field: { onChange, value },
fieldState: { error },
formState
}) => <TextField onChange={onChange} {...props} />}
/>
);
}
然后在应用程序/父级,我想要这些步骤:
- 获取数据并显示到 TextField。
- 修改TextField中的文字
- 在 TextField 中提交新值
这是我的方法:
//App.tsx export default function App() { const { control, handleSubmit } = useForm(); const [fetchedData, setFetchedData] = useState<string>(""); ... return ( ... <CustomTextField control={control} name="description" label="Description" type="text" variant="outlined" value={fetchedData ? fetchedData: ""} //<-- fetched data is set to value of TextField to display /> ... ); }使用这种方法,我设法在 TextField UI 上显示
fetchedData,但无法在文本字段上修改该数据。此外,当我提交时,数据与 TextField 上显示的内容不正确我为此创建了一个代码框链接:https://codesandbox.io/s/blissful-sanne-x858dx?file=/src/App.tsx:190-1155
如何显示 fetchedData,还可以修改文本字段中的数据,然后通过 React Hook Form 提交?
【问题讨论】:
-
我没有看到您的实现的 onChange 事件,您需要 onChange 事件来更改状态,以便可以更新它。
-
我必须将 onChange 从 Controller 传递给 TextField,所以 React Hook Form 可以工作。我不知道如何使用 onChange 父级别和组件级别
标签: javascript reactjs typescript material-ui react-hook-form