react-hook-form
ãšmaterial-ui
ã䜿çšããŠåçŽãªãã©ãŒã ãäœæããããšããŠããŸãã 次ã®ããšãã§ããããã«ããããšæããŸãã
ç³ãèš³ãããŸããããåé¡ã®æ€çŽ¢ãäžé©åã§ããhttpsïŒ//github.com/mui-org/material-ui/issues/17018ã®éè€ã®ãã
æåã®ã¹ãããã¯æ£ããæ©èœããŸãã
ãªã»ããé¢æ°ã¯å€ãã¯ãªã¢ããŸãããmaterial-ui TextFieldã®ç¶æ
ã¯ãfilledãã®ãŸãŸã§ããããã«èŠããã¹ã¿ã€ã«ã¯ã¯ãªã¢ãããããŒã¿ãšäžèŽããŸããã
åæå€ã䜿çšãããªã»ããé¢æ°ã¯å€ãæ£ããèšå®ããŸãããåäœã¯ãªã»ããã®å Žåãšåãã§ããïŒãã®å Žåã¯éïŒãããŒã¿ã¯ããŒããããŸãããTextFieldã®å
éšç¶æ
ã¯ãåãããããŸããã
material-uiå ¥åã¯ãããŒã¿ãããŒã/ã¯ãªã¢ããããšãã«å éšç¶æ ãæŽæ°ããå¿ èŠããããŸã
ãã®CodePenã®3ã€ã®ãã¿ã³ãè©Šãããšãã§ããŸãïŒ
https://codesandbox.io/s/material-demo-ywutu
ç§ã¯react-hook-formãããžã§ã¯ãã§åé¡ãæèµ·ããŸããããææè ããããã§ãéãããã«èšãããã®ã§ãããã«ããŸã:)
waiting for users upvotes
ã¿ã°ãè¿œå ããŸããã 人ã
ããã®ãããªãµããŒããæ¢ããŠãããã©ããããããªãã®ã§ãç§ã¯åé¡ãéããŸãã ã§ãããããããããªãããã®åé¡ã«è³æããŠãã ããã è³æ祚ã®æ°ã«åºã¥ããŠãåãçµã¿ãåªå
ããŸãã
https://npm-stat.com/charts.html?package=formik&package=react-hook-form&package=react-final-form
éåžžã«å¿ èŠãªïŒpray :: pray :: prayïŒåé¿çã¯ãããŸããïŒ
ãšãŠãå¿ èŠã§ãïŒ
絶察ã«å¿ èŠã§ãã
解決çãã©ããªããã«ã€ããŠã®ã¢ã€ãã¢ã¯ãããŸããïŒ
å ·äœçãªããšã¯ããããŸããããäž¡æ¹ã®ã©ã€ãã©ãªã䜿ãå§ããã®ã§ã2ã€ã®ã©ã€ãã©ãªãããç·å¯ã«çµ±åããããšæã£ãŠããŸãã Reactããã¯ãã©ãŒã ãšãããªã¢ã«UIã¯äžç·ã«çŽ æŽãããã§ãã TypeScriptã®ãµããŒããçŽ æŽãããã§ãã
ããã @ oliviertassinariãããèŠãŠãããŠããããšãã MUI TextField
ã¯ããã€ãã£ãå
¥åã®APIã§ããé©åã«æ©èœããŠããããã§ãã ããã¯æ¬åœã«ããããã§ãã e.target.value = 'xxx'
ãåŒã³åºããšãããã¹ãã®äžã«ãã¬ãŒã¹ãã«ããŒããã¹ããªãŒããŒã¬ã€ã衚瀺ãããŠããŸããã ð
https://codesandbox.io/s/react-hook-form-conditional-fields-delete-1frsm
äžèšã®äŸã§ã¯ã reset
APIãåŒã³åºãããåŸã <Switch />
ã¯ãªã»ãããããŸãã
ãã€ãã£ããã©ãŒã å ¥åAPIïŒå ¥åã®åç §ãä»ããŠå€ãèšå®ããã³ãªã»ããããïŒããµããŒããããã¹ãŠã®ãã©ãŒã é¢é£ã³ã³ããŒãã³ãã䜿çšã§ãããšéåžžã«äŸ¿å©ã§ããããã¯å€§ããªäœæ¥ã§ãããreact-hook-formã®ãããªå°ããªã©ã€ãã©ãªããµããŒãããããšã¯ç解ããŠããŸããèæ ®ãã¹ãäœãïŒããããlibããã人æ°ã«ãªããŸã§â€ïžïŒ
ç¹°ãè¿ãã«ãªããŸããããã®åé¡ã調æ»ããããã®æéãšåŽåã«æè¬ããŸãïŒMUIã®ãããªå·šå€§ãªãªãŒãã³ãœãŒã¹ãããžã§ã¯ããç¶æããããšã¯ç§ã«ã¯å€¢äžã§ãReactã³ãã¥ããã£ã«çŽ æŽãããä»äºãããŠããŸãïŒã ããã«å ããŠãMUIã䜿çšããããã«èªåã®åŽã§äœæ¥ã§ããããšãããã°æããŠãã ããã
也æ¯
æ现æž
@ bluebill1049ã芧ããã ãããããšãããããŸãã ã©ã€ãã©ãªã¯è¯ãçœåŒåãåŸãŠããããã§ãããããã§ãformikããã¯ããã«é ããŠããŸãã ã¹ã€ããã®ãªã»ããã ããåé¡ã§ããïŒ
ãã®åé¡ãåéããŠèª¿æ»ããŠãããreact-hook-form
ã¯ãŸã çºã®æ°ããç·ã®åã§ãããããå€ãã®ãŠãŒã¶ãŒãreact-hook-form
æ¡çšããŠãããã©ããã確èªããããã«ããå°ãåŸ
ã£ãŠã¿ããå Žåã¯ãè¡åãèµ·ãããŸãããç§ã¯ãããå®å
šã«åççã ãšæããŸãïŒç§ã®å¿ã®äžã§ããããããMUIã§åäœããããšãåæããŠããŸãããããã¯å©å·±çã§ããðŒïŒã ãããŸã§ã®éã react-hook-form
ãšäºææ§ã®ããå
¥åããŒãã«ãäœæããŸãïŒããããã³ãŒããµã³ãããã¯ã¹ã§ãïŒãããã«ãæçš¿ããŸãã
ç©äºãreact-hook-formã§ããŸãæ©èœãã䜿çšéã倧ãããªã£ãŠããå Žåã¯ããã€ãã£ãå
¥åAPIïŒreact hook formãèå°è£ã§äœ¿çšãããã®ïŒã䜿çšããããšãæ€èšã§ããŸãã input
ãååŸããã®ã¯çŽ æŽãããããšã§ãã select
ã radio
ã checkbox
ã¯ããã©ãŒã ã®äž»ãªçšéãšããŠæ©èœããŸãã
åèãŸã§ã«https://github.com/react-hook-form/react-hook-form-input
ãŸããããã©ã«ãããŒã¿ã®ãªã»ãããšããŒãã«é¢ããåé¡ã«çŽé¢ããŠããŸãã ãã®åé¡ã調ã¹ãŠãã ããã ãŸãã¯ãå°ãªããšãä»ã®ãšããåé¿çãæäŸããŸãã
ãã@raikusyç§ãäžã«æçš¿ãããªã³ã¯ãèŠãŠãã ãããç§ã¯ãããããªããå©ãããšæããŸãã é·æçã«ã¯ãMUIã³ã³ããŒãã³ãããã€ãã£ããã©ãŒã API'reset 'ããµããŒãããã³ã³ããŒãã³ã' ref 'ãä»ããŠå€ãæŽæ°ããã®ã¯çŽ æŽãããããšã§ãããããã¯MUIã«å€ãã®æ©èœãšã¢ã€ãã¢ã䞊ãã§ãããšç¢ºä¿¡ããŠãããé«é¡ãªäœæ¥ã§ããããã¯ãã£ãšéèŠã§ãã äžèšã§èª¬æããããã«ãreactããã¯ãã©ãŒã ãäž»æµã®libã«ãªããã人æ°ãåºããŸã§ãMUIã¯è§£æ±ºçã®èª¿æ»ãéå§ããŸãã ããããçã«ããªã£ãŠããããšãé¡ã£ãŠããŸã:)åå¿ããã¯ãã©ãŒã ã䜿çšããŠãããŠããããšãâ€ïžð€©ð€ð»
åèãŸã§ã«ãã©ãããŒã³ã³ããŒãã³ãã䜿çšãããšããã©ãŒã ã®åã¬ã³ããªã³ã°ã0ã«ããããšãã§ããŸãã å ¥åç¶æ ã®æŽæ°ã¯ã©ãããŒã³ã³ããŒãã³ãå ã§åé¢ãããŠããããã§ããð€©ð€ð»ð
ããããšã@ bluebill1049ããã¯çŽ æŽãããèŠããŸãã å°éå ·ããããŒã¿ãæž¡ããããšãã«ãã©ãŒã ãã£ãŒã«ããããã©ã«ãå€ã«ãªããšããæ¡ä»¶ããããŸãã ã§ã¯ãTextFieldã³ã³ããŒãã³ãã¯äžèšã®ãœãªã¥ãŒã·ã§ã³ã§ãæ©èœããŸããïŒ ãŸããå°éå ·ã䜿çšããŠããã©ã«ãå€ããã©ãŒã ã«æž¡ãããè¯ãäŸãæ¢ããŠããŸããã å°éå ·ã¯ããã©ãŒã ããã§ã«ããŠã³ããããåŸã®apiåŒã³åºãããæ¥ãå ŽåããããŸãã
@raikusyã©ãããŒã³ã³ããŒãã³ãã§reset / setValueAPIã䜿çšã§ããã¯ãã§ãã
ãªã»ããïŒãã©ãŒã å
šäœ-> https://react-hook-form.com/api#setValue
setValueïŒå人çš-> https://react-hook-form.com/api#reset
<Slider />
ãRHFã§åäœãããããšãã§ããŸããã
次ã®ããã«äœ¿çšããŸãã
<FormControl fullWidth component="fieldset" margin="normal">
<FormLabel component="legend">Palavras</FormLabel>
<RHFInput
as={<Slider min={100} max={1200} step={100} valueLabelDisplay="auto" marks={marks} />}
type="input"
name="words"
register={register}
setValue={setValue}
/>
</FormControl>
次ã®ãšã©ãŒãçºçããŸãã
Warning: Failed prop type: Invalid prop `value` supplied to `ForwardRef(Slider)`.
in ForwardRef(Slider) (created by WithStyles(ForwardRef(Slider)))
in WithStyles(ForwardRef(Slider)) (created by SetupAccountForm)
in Unknown (created by SetupAccountForm)
in fieldset (created by ForwardRef(FormControl))
in ForwardRef(FormControl) (created by WithStyles(ForwardRef(FormControl)))
in WithStyles(ForwardRef(FormControl)) (created by SetupAccountForm)
in form (created by SetupAccountForm)
in SetupAccountForm (created by SetupAccountPage)
in div (created by ForwardRef(CardContent))
in ForwardRef(CardContent) (created by WithStyles(ForwardRef(CardContent)))
in WithStyles(ForwardRef(CardContent)) (created by SetupAccountPage)
in div (created by ForwardRef(Paper))
in ForwardRef(Paper) (created by WithStyles(ForwardRef(Paper)))
in WithStyles(ForwardRef(Paper)) (created by ForwardRef(Card))
in ForwardRef(Card) (created by WithStyles(ForwardRef(Card)))
in WithStyles(ForwardRef(Card)) (created by SetupAccountPage)
in div (created by ForwardRef(Grid))
in ForwardRef(Grid) (created by WithStyles(ForwardRef(Grid)))
in WithStyles(ForwardRef(Grid)) (created by Layout)
in Layout (created by SetupAccountPage)
in SetupAccountPage (created by App)
in Route (created by App)
in Switch (created by App)
in Router (created by HashRouter)
in HashRouter (created by App)
in App (created by Root)
in div (created by ForwardRef(Container))
in ForwardRef(Container) (created by WithStyles(ForwardRef(Container)))
in WithStyles(ForwardRef(Container)) (created by Root)
in div (created by Styled(MuiBox))
in Styled(MuiBox) (created by Root)
in Provider (created by Root)
in Root Button.js:233:15
@hbarcelosã¯ã¹ã©ã€ããŒãå€ã®å°éå
·ããµããŒãããŠããªãããã§ã:(ç§ã¯ããã«ã€ããŠããã€ãã®èª¿æ»ãè¡ããŸãããããŸã§ã®éã useEffect
ç»é²ãããŠããã«ã¹ã¿ã ã¬ãžã¹ã¿ã䜿çšããå¿
èŠããããããããŸãã
ã©ããããããšã
ç§ã¯ãã®ãããªãã®ãäœãããšã«ãªããŸããïŒ
import React, { useEffect, useCallback, useState, useMemo } from 'react';
import t from 'prop-types';
import clsx from 'clsx';
import { makeStyles } from '@material-ui/core/styles';
import Box from '@material-ui/core/Box';
import Slider from '@material-ui/core/Slider';
const useStyles = makeStyles(theme => ({
sliderWrapper: {},
sliderLabel: {
marginTop: theme.spacing(1),
marginBottom: theme.spacing(0.5),
color: theme.palette.primary.main,
},
}));
function CustomSlider({
register,
unregister,
setValue,
name,
rules,
defaultValue,
valueLabelAs,
formatLabel,
...rest
}) {
const cl = useStyles();
const [currentValue, setCurrentValue] = useState(defaultValue);
useEffect(() => {
register({ name });
return () => unregister(name);
}, [defaultValue, name, register, setValue, unregister]);
const valueLabel = useMemo(() => {
if (!valueLabelAs) {
return null;
}
return React.cloneElement(
valueLabelAs,
{ className: clsx(valueLabelAs.props.className, cl.sliderLabel) },
formatLabel(currentValue)
);
}, [cl.sliderLabel, currentValue, formatLabel, valueLabelAs]);
const handleChange = useCallback(
(_, value) => {
setValue(name, value);
setCurrentValue(value);
},
[name, setValue]
);
return (
<React.Fragment>
{valueLabel}
<Box className={cl.sliderWrapper}>
<Slider {...rest} onChange={handleChange} defaultValue={defaultValue} />
</Box>
</React.Fragment>
);
}
CustomSlider.defaultProps = {
rules: {},
defaultValue: '',
valueLabelAs: null,
formatLabel: v => v,
};
CustomSlider.propTypes = {
register: t.func.isRequired,
unregister: t.func.isRequired,
setValue: t.func.isRequired,
name: t.string.isRequired,
rules: t.object,
defaultValue: t.oneOfType([t.number, t.string]),
valueLabelAs: t.node,
formatLabel: t.func,
};
export default CustomSlider;
æåŸ ã©ããã«åäœããŸãã
ããã倧ãã«å¿ èŠã§ãã
é·æçã«ã¯ãMUIã³ã³ããŒãã³ãããã€ãã£ããã©ãŒã ã®api'reset 'ããµããŒãããã³ã³ããŒãã³ã' ref 'ãä»ããŠå€ãæŽæ°ããã®ã¯çŽ æŽãããããšã§ãã
@ bluebill1049ããã¯ReactãŸãã¯react-hook-formèªäœã®åé¡ã§ã¯ãããŸãããïŒ éçºè
ã¯ãreact-hook-formã䜿çšããŠãå
¥åç¶æ
ã®å€åã«ã©ã®ããã«ãåå¿ãããããšã«ãªã£ãŠããŸããïŒ
ç§ãã«ã¹ã¿ã å
¥åãäœæããReactéçºè
ã§ãããèŠçŽ ããã£ã±ã/空ã«ãªã£ããšãã«èŠçŽ ã®ã¹ã¿ã€ã«ãå€ããããšããŸãããããããã©ã®ããã«å®è£
ããã°ããã§ããïŒ å€æŽã€ãã³ãã¯çºçããŠããªãããã§ãã
ã©ã€ãã©ãªãReactã®å®£èšåã¢ãã«ã®ãå€éšãã§å ¥åå€ãå€æŽãããšãã«å€æŽã€ãã³ããçºçãããããšãæ€èšããŸãããïŒ @ test-library / reactã§è¡ãããŠããããã«ïŒ
ããã«ããããã€ãã£ãå ¥åèŠçŽ ã«äŸåããMaterial-UIã³ã³ããŒãã³ãã®ãµããŒããå¯èœã«ãªããŸããã¹ã©ã€ããŒãªã©ã®ä»ã®ã³ã³ããŒãã³ãã§ã¯ãã«ã¹ã¿ã ã©ãããŒãåŒãç¶ãå¿ èŠã«ãªããŸãã ã¹ã©ã€ããŒã«ã¯ããªã¥ãŒããããããããŸãããonChangeã®ã·ã°ããã£ã¯ãã€ãã£ãå ¥åãšã¯ç°ãªããŸãã ä»ã®ãã©ãŒã ã©ã€ãã©ãªãšåãããã«çµ±åã©ã€ãã©ãªãèŠãã®ã¯çŽ æŽãããããšã ãšæããŸãïŒïŒ15585ã
ãªããã®åé¡ãããã»ã©å€ãã®è³æãåŸãã®ãçåã«æã£ãŠããã®ã§ãããç§ã¯ãããèŠã€ãããšæããŸãðïŒ
https://react-hook-form.com/advanced-usage#ControlledmixedwithUnmanagedComponents
ã¡ãã£ãš@oliviertassinari ããã®åé¡ã«ããäžåºŠè¿ã¥ããŠãããŠããããšãð
ç§ãã«ã¹ã¿ã å ¥åãäœæããReactéçºè ã§ãããèŠçŽ ããã£ã±ã/空ã«ãªã£ããšãã«èŠçŽ ã®ã¹ã¿ã€ã«ãå€ããããšããŸãããããããã©ã®ããã«å®è£ ããã°ããã§ããïŒ å€æŽã€ãã³ãã¯çºçããŠããªãããã§ãã
ãã€ãã£ãå
¥åã䜿çšããŠããèªåã®ãããžã§ã¯ãã§ãœãªã¥ãŒã·ã§ã³ã®CSSã»ã¬ã¯ã¿ãŒãæ¢ããŸããããšãã°ãèŠçŽ ã«ç©ºã®å€ããããã¹ã¿ã€ã«ã衚瀺ããŸãã å¥ã®æ¹æ³ãšããŠãreact-hook-form watch
APIã䜿çšããŠç©ºã®å€ãæ€åºãã prop
ãšããŠæž¡ããŸãïŒã©ãããããå
¥åã³ã³ããŒãã³ãã䜿çšïŒã
ã©ã€ãã©ãªãReactã®å®£èšåã¢ãã«ã®ãå€éšãã§å ¥åå€ãå€æŽãããšãã«å€æŽã€ãã³ããçºçãããããšãæ€èšããŸãããïŒ @ test-library / reactã§è¡ãããŠããããã«ïŒ
ãããç§ãã¡ã¯ã»ãšãã©react-hook-form-input
äžã§ããããã£ãŠããŸãã ð
äœå¹Žã«ãããã£ãŠãã©ãŒã ãå¶åŸ¡ããåŸããã©ãŒã ãæ§ç¯ããããã®å¶åŸ¡ãããŠããªãã³ã³ããŒãã³ããä¿¡ããŠããŸããããã«ãããäœæ¥ãã¯ããã«ç°¡åã«ãªããŸãã ãã¹ãŠã®ãšããžã±ãŒã¹ã解決ã§ããããã§ã¯ãããŸãããïŒFacebook LOLã§äœæ¥ããŠããå ŽåïŒããã©ãŒã ã®äœæã«é¢ããŠã¯ã確ãã«ç§ã®ä»äºãåšãã®äººã®ä»äºã楜ã«ãªããŸãã HTMLå ¥åã¯ããèªäœãã¹ããŒããã«ã§ããããã®libã«å«ããããšæããŸãïŒæ£ãããééã£ãŠãããã§ã¯ãªãã代æ¿ãœãªã¥ãŒã·ã§ã³ã§ãïŒã
ç§ã¯Reactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã®ã倧奜ãã§ãããã®ããããã®åšãã«å€ãã®ããã±ãŒãžãæ§ç¯ããŠããŸãã Reactãå¶åŸ¡ãããã³ã³ããŒãã³ããæ¡çšããããšãç解ããŠããŸãã ãã ããreact-hook-formã¯ãéçºè
ããã©ãŒã å¶åŸ¡ãæ§ç¯ããããšããããã¯ããŠããŸãããããã¯ã useEffect
ã«ã¹ã¿ã register
ãå®è¡ã§ããããã§ãã
çµè«ïŒ
ãã®åé¡ã解決ã§ãããšæããŸãããã®åé¡ã«é¢é£ãããŠã§ããµã€ãã®ãªã³ã¯ãåé€ããŸãã ããã«ããã®ããŒãžãæŽæ°ããŠreact-hook-form-input
ãå«ããããšã¯ã§ããŸããïŒ
https://material-ui.com/components/text-fields/#complementary -projects
ãããç§ãã¡ã¯ã»ãšãã©react-hook-form-inputã®äžã§ãããè¡ã£ãŠããŸãã
@ bluebill1049ããã¯ç§ã®ææ¡ãšã¯å察ã®ã¢ãããŒãã®ããã«èãããŸãã ç§ã¯æ¬¡ã®ããšãç解ããŠããŸãã
input.value = 'x'
ãŸãã ããã¯ãå
¥åå€ãå€æŽãããããšãç¥ãæ¹æ³ããªããããReactã«ãšã£ãŠåé¡ããããŸãã ããšãã°ãå€æŽã€ãã³ãã¯ããªã¬ãŒãããŸããã1. Reactãreact-hook-formã¢ãããŒãããµããŒãããããã«ããŸãæ©èœããå¯èœæ§ã¯éåžžã«äœãã2ãreact-hook-formã¯ãå¶åŸ¡ãããå ¥åãšç䌌å¶åŸ¡ãããŠããªãå ¥åïŒããã©ã«ãå€ãšonChangeã®ã¿ããªãã¹ã³ããå€ïŒãç§ã¯ãããææ¡ããŸãïŒ
詳现ãªè¿ä¿¡ãããããšãã @ oliviertassinari ã ç§ã¯ããªãã®ææ¡ããã解決çã§ããã€ãã®ãããªã調æ»ãè¡ããŸã:)
ããªããReactã§äžã§è¿°ã¹ãåé¡ã®ã»ãšãã©ã¯ãç§ãæ¹åãããéšåã§ããå¶åŸ¡ãããã³ã³ããŒãã³ããåãæ¿ãããšãã ãšæããŸãã
ãã æ確ã«ããŸãïŒ
ã ããç§ã¯ããªããreact-hook-formã§ããã解決ã§ãããšç¢ºä¿¡ããŠããŸãã ãããã®ä¿®æ£ãè©ŠããŠ/å±éããããã¥ã¡ã³ãããç§ãã¡ã®åŽã®è²¬ä»»ãåãé€ãããšãã§ããã°å¹žãã§ãðã
ãããã®å€æŽã¯ããã©ãŒã ã©ã€ãã©ãªã®çœåŒã«æ¬åœã«åœ¹ç«ã€ã¯ãã§ããæè¬ããŠããã ããã°å¹žãã§ãïŒDã
ããªããReactã§äžã§è¿°ã¹ãåé¡ã®ã»ãšãã©ã¯ãç§ãæ¹åãããéšåã§ãããå¶åŸ¡ãããŠããªãã³ã³ããŒãã³ãããå¶åŸ¡ãããã³ã³ããŒãã³ããŸãã¯å¶åŸ¡ãããã³ã³ããŒãã³ãã«åãæ¿ãããšãã ãšæããŸãã
ãŠãŒã¶ãŒãå¶åŸ¡ãããŠããªããã®ãšå¶åŸ¡ãããŠãããã®ãåãæ¿ãããšãReactã¯èŠåããŸãã ç§ã¯ããªãã®äž»åŒµãç解ããŠããŸããã
ã ããç§ã¯ããªããreact-hook-formã§ããã解決ã§ãããšç¢ºä¿¡ããŠããŸãã ãããã®ä¿®æ£ãè©ŠããŠ/å±éããããã¥ã¡ã³ãããç§ãã¡ã®åŽã®è²¬ä»»ãåãé€ãããšãã§ããã°å¹žãã§ãðã
ãŸããç§ã¯MUIãéé£ããŠãããããç§ã¯MUIã倧奜ãã§ãïŒç§ã®å°ããªæâïžãšäžç·ã«ïŒã ãåç¥ã®ããã«ãreact-hook-formã¯çºã®æ°ããç·ã®åã§ããç§ã¯ç¹å®ã®åé¡ã«ã€ããŠæ³šæãå¢ããåŸãããšããŠããŸããã ããªãããã®ããã«èŠã€ããããç§ã¯è¬çœªããŸãïŒéé£ïŒã æ¹ããŠãååãšã調æ»ã«æè¬ããããŸãã
ïŒéé£ã§ã¯ãªãïŒ
ããªããReactã§äžã§è¿°ã¹ãåé¡ã®ã»ãšãã©ã¯ãç§ãæ¹åãããéšåã§ãããå¶åŸ¡ãããŠããªãã³ã³ããŒãã³ãããå¶åŸ¡ãããã³ã³ããŒãã³ããŸãã¯å¶åŸ¡ãããã³ã³ããŒãã³ãã«åãæ¿ãããšãã ãšæããŸãã
ãŠãŒã¶ãŒãå¶åŸ¡ãããŠããªããã®ãšå¶åŸ¡ãããŠãããã®ãåãæ¿ãããšãReactã¯èŠåããŸãã ç§ã¯ããªãã®äž»åŒµãç解ããŠããŸããã
ç³ãèš³ãããŸããããå¶åŸ¡ãããã³ã³ããŒãã³ããæå³ããŸãã:)ã³ã¡ã³ããä¿®æ£ããŸãã
@ bluebill1049çŽ æŽããã:)
ã©ããããããšãã @ oliviertassinari ïŒããªãã¯ãšãŠã芪åã§ãïŒ
Material-UIã¯åãææ¡ãããä¿®æ£ãé©çšã§ããŸããããããã¹ãã§ã¯ãªããšæããŸãã2ã€ã®æ¬ ç¹ããããŸãã1ãMaterial-UIã§ã®ã¿æ©èœããåãäœæ¥ãäœåºŠãç¹°ãè¿ãå¿ èŠããããŸãã 2.ãããã®ãããã¯ãã®æææš©ã¯ãã©ã€ãã©ãªãåã£ããã¬ãŒããªãïŒæ £çšçãªReact APIããã€ãã¹ããïŒã«èµ·å ãããããreact-hook圢åŒã®ãŸãŸã«ããå¿ èŠããããŸãã
誰ãããã®åé¡ã«èžã¿èŸŒãã å Žåã«åããŠãããã¿ããªã ïŒç§ãã¡ã¯ãã°ããã®éå¯ãã«ããã«åãçµãã§ããŸããðïŒ
ç§ãã¡ã¯RHFã®æ¬¡ã®ã¡ãžã£ãŒããŒãžã§ã³ã«åãçµãã§ããŸããããã«ã¯ãç¹ã«å¶åŸ¡ãããã³ã³ããŒãã³ãã®åšãã§ãç掻ã®è³ªãæŽæ°ãããŠããŸãã UIã©ã€ãã©ãªã®ãµããŒããæ¹åãããŸãã 次ã®ã³ãŒãã¯ãå¶åŸ¡ãããUIã©ã€ãã©ãªã®setValue
ãšdefaultValue
ã解決ããŸãããã¢ããª/ãã©ãŒã ã¬ãã«ã§æå°éã®åã¬ã³ããªã³ã°ãç¶æããåã¬ã³ããªã³ã°ã¯å
¥åã³ã³ããŒãã³ãã¬ãã«ã§åé¢ãããŸãã
以äžã¯ãRHFã®V4ã䜿çšããŠããå Žåã®æ§æã§ãã
import TextField from '@material-ui/core/TextField';
const { control } = useForm();
<Controller as={TextField} control={control} name="firstName" rules={{ required: true }} />
å©ããå¿
èŠã
ãããªã¢ã«ã®ããã¹ããã£ãŒã«ãã«åé¡ããããŸãïŒããããä»ã®muiãåæ§ã§ãïŒã
ããã¹ããã£ãŒã«ãã空ã®å Žåãæåã®ããŒã¹ãã¢ã¯é
ããªããŸããå€ã空ã«å€æŽããå Žåãåæ§ã§ãã
äœããã®çç±ã§ããã©ãŒã å
šäœãåã¬ã³ããªã³ã°ããŸãã
ã¯ã€ãã¯ããŒãïŒç§ã¯é ããããšãªãéãã¿ã€ãããŠããŸãã é 延éšåã¯äžèšã®çç±ã«ãããã®ã§ãã
ããã«ã¡ã¯ã¿ããªããã®åé¡ã¯ç§ãreact-hook-formããã³ã³ãããŒã©ãŒã䜿çšããŠãæç¶ããŸã:(
ãã®åé¡ãåéã§ããŸããïŒ ãããšãç§ã¯ãããééã£ãŠããŸããïŒ
ç·šéïŒç§ã䜿çšããŠãã解決çã¯InputLabelProps={isEdition && { shrink: isEdition }}
ããã§ã isEdition
ã¯ãç·šéç»é¢ã§äœ¿çšããŠãããã©ã°ã§ãã
@Luccasoli plzã¯ããã¥ã¡ã³ããåç §ããŠãã ããïŒ //react-hook-form.com/api#Controller
MUIã®äŸãå«ãäŸããããŸãïŒ //codesandbox.io/s/react-hook-form-controller-079xx
ç³ãèš³ãããŸããã@ bluebill1049ã§ããããã®äŸã§ã¯åæ§ã®ç¶æ³ã¯èŠã€ãããŸãã
@Luccasoliã¯defaultValue
ç§ã¯è©ŠããïŒ
ã©ã¡ãã®æ¹æ³ã§ããtextFieldã¯å ¥åãå ¥åãããããšãèªèãããã©ãã«ã¯å ¥åãä¿æããŸã
ã¯ãããããå¥åŠãªããšã«ããã®ãããªdefaultValueãç¶æããŸãããŠãŒã¶ãŒã«å¥åŠãªå€ã衚瀺ããªãããã«ãåžžã«ç©ºã®æååå€ããå§ããããšããŸãã
ãLoadingãdefaultValueã衚瀺ããããšãã§ããŸããã空ã®åæå€ã®æ¹ãèå³æ·±ãããã§ããããã¯å¯èœã ãšæããŸããïŒ
ç·šéïŒããã空ã®æååã§ãåäœããŸã...ã¯ã¯ã¯ãããããšããç§ã¯ä»¥åã«ãããè©ŠããããšããããšèªããŸããããããã§ãã
@ bluebill1049ç§ã¯ããªãã®ãã¢ã埮調æŽããŠãç§ãèŠãŠããåé¡ã瀺ããŸãããããŸãããã°ãããªãã¯è¯ã解決çãæã£ãŠããŸãã
https://codesandbox.io/s/react-hook-form-controller-n196b?file=/src/index.js
ãã¿ã³ãæå¹ã«ããåã«ããã§ãã¯ããã¯ã¹ãæ€èšŒããããšããŠããŸãã ãã§ãã¯ããã¯ã¹ãé€ããŠãç§ã䜿çšããä»ã®ãã¹ãŠã®ãã£ãŒã«ãã¯æåŸ
ã©ããã«æ©èœããŸãã
ãã®ãµã³ãããã¯ã¹ã¯ãããªã¢ã«UIã«éåžžã«äŸ¿å©ã§ããããšãããããŸãããã¹ã©ã€ããŒãéžæããã®ä»ããã€ãã®äŸããããŸãã
https://codesandbox.io/s/react-hook-form-controller-079xx?file=/src/index.js
æãåèã«ãªãã³ã¡ã³ã
waiting for users upvotes
ã¿ã°ãè¿œå ããŸããã 人ã ããã®ãããªãµããŒããæ¢ããŠãããã©ããããããªãã®ã§ãç§ã¯åé¡ãéããŸãã ã§ãããããããããªãããã®åé¡ã«è³æããŠãã ããã è³æ祚ã®æ°ã«åºã¥ããŠãåãçµã¿ãåªå ããŸããhttps://npm-stat.com/charts.html?package=formik&package=react-hook-form&package=react-final-form