cari

Rumah  >  Soal Jawab  >  teks badan

Gunakan ReactJS TypeScript MUI, gunakan useState untuk menetapkan nilai TextField dan tambahkan fungsi acara onchange untuk TextField

<p>Saya seorang pemula yang sedang membangun dengan ReactJS dan MUI dan mempunyai borang medan ReactJS TypeScript dengan MuiText. Ingin boleh menggunakan kaedah <code>useState</code> untuk menukar nilai medan teks. </p> <p>Tambahkan juga fungsi <code>onchnage</code>Saya boleh menambah fungsi onchange untuk medan teks biasa tetapi tidak pasti bagaimana untuk menambahnya untuk medan teks MUI?</p> <pre class="brush:php;toolbar:false;">import * sebagai React daripada 'react'; import { useState } daripada "react" import Butang daripada '@mui/material/Button'; import CssBaseline daripada '@mui/material/CssBaseline'; import TextField daripada '@mui/material/TextField'; import Grid daripada '@mui/material/Grid'; import Box daripada '@mui/material/Box'; import Kontena daripada '@mui/bahan/Bekas'; import { createTheme, ThemeProvider } daripada '@mui/material/styles'; import { useForm, SubmitHandler, Controller } daripada 'react-hook-form'; import * sebagai yup daripada 'yup'; import { yupResolver } daripada '@hookform/resolvers/yup'; antara muka IFormInputs { laluan fail: rentetan; } skema const = yup.object().shape({ filepath: yup.string().min(4).required(), }); const theme = createTheme(); eksport fungsi lalai MuiTextField() { const { kawalan, mengendalikanSerah, formState: { ralat }, } = useForm<IFormInputs>({ penyelesai: yupResolver(skema), }); const [filepath, setFilepath] = useState("vodeo.mp3"); const onSubmit: SubmitHandler<IFormInputs> = (data) => { console.log('data diserahkan: ', data); console.log('filepath: ', data.filepath); }; kembali ( <ThemeProvider theme={theme}> <Komponen bekas="utama" maxWidth="lg"> <CssBaseline /> <Kotak sx={{ marginTop: 8, paparan: 'flex', flexDirection: 'lajur', alignItems: 'pusat', }} > <borang onSubmit={handleSubmit(onSubmit)}> <Kotak sx={{ mt: 3 }}> <Jarak bekas grid={2}> <Item grid xs={16} sm={6}> <Pengawal name="filepath" kawalan={kawalan} defaultValue="" render={({ medan }) => ( <Medan Teks {...medan} label="Laluan Fail" error={!!errors.filepath} helperText={errors.filepath ? errors.filepath?.message : ''}autoComplete="laluan-fail" kelebaran penuh /> )} /> </Grid> <Butang type="serahkan" variant="terkandung" sx={{ mt: 3, mb: 2 }} > Hantar </Butang> </Grid> </Kotak> </form> </Kotak> </Bekas> </ThemeProvider> ); }</pre> <p>Kemas kini: Ini ialah pautan perkongsian kod: https://codesandbox.io/s/boring-water-m47uxn?file=/src/App.tsx</p> <p>Apabila kami menukar nilai kotak teks kepada <kod>auto</kod>, kami mahu menukar nilai kotak teks kepada <kod>audio.mp3</kod>, tetapi ia tidak tidak bekerja. </p>
P粉212114661P粉212114661520 hari yang lalu549

membalas semua(1)saya akan balas

  • P粉969666670

    P粉9696666702023-08-29 19:47:05

    MUI Textfield juga mempunyai onChange:

    <TextField
         error={Boolean(touched.name && errors.name)}
         fullWidth
         label={t('Name')}
         name="name"
         onBlur={handleBlur}
         onChange={handleChange}
         value={values.name}
         variant="outlined"
         autoComplete="off"
    />

    'Medan' dalam fungsi pemaparan mengandungi onChange. Keadaan borang disimpan dalam useForm. Dalam prop useForm anda perlu menambah defaultValues. Anda tidak menghantar prop type="file", mungkin masalah anda.

    Panduan untuk membuat input fail menggunakan borang react hook: https://refine.dev/blog/how-to-multipart-file-upload-with-react-hook-form/

    Textfield API: https://mui.com/material-ui/api/text-field/

    balas
    0
  • Batalbalas