亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 React 鉤子讀取狀態

從 React 鉤子讀取狀態

慕尼黑5688855 2021-08-20 16:58:31
我有以下代碼const initialState = {    values: {        email: '',        password: ''    },    touched: {        email: false,        password: false    },    errors: false,    isValid: false,    isLoading: false,    submitError: null};function SignIn(props) {    const [state, setState] = useState(initialState);    useEffect(() => {        console.log(state);    });    const handleFieldChange = (field, value) => {        const newState = state;        newState.submitError = null;        newState.touched[field] = true;        newState.values[field] = value;        newState.errors = true; // set to true just for test        setState(newState);    };    const showEmailError = state.errors.email;    return (        <div>        <TextField            className={classes.textField}            label="Email address"            name="email"            onChange={event => handleFieldChange('email', event.target.value)}            type="text"            value={state.email}            variant="outlined"        />        {showEmailError && (            <Typography                className={classes.fieldError}                variant="body2"            >                {state.errors.email[0]}            </Typography>        )}        </div>    )    }我遇到的問題是,在handFieldChange執行時,沒有出現電子郵件錯誤。就好像我沒有在我的 return 語句中得到最新的狀態變化。我做錯了什么?
查看完整描述

3 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

我在評論中給了你一個提示,但你似乎忽略了它。你不應該直接改變 state 對象,因為當你調用 setState 時,React 會將它與你原始的 state 對象引用進行比較(感謝 Ross 在評論中指出)。由于無論如何您已經對其進行了變異并且 React 沒有找到任何更改的屬性,因此您的組件不會更新,因此useEffect不會調用 hook。在工作之前創建對狀態對象的新引用。您需要執行以下操作:

替換

const newState = state;

const newState = { ...state }


查看完整回答
反對 回復 2021-08-20
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

setState認為沒有任何變化,因為你state每次都傳遞同一個對象。在每次更新時創建一個新對象:

const newState = { ...state };


查看完整回答
反對 回復 2021-08-20
  • 3 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號