編輯:檢查布萊恩的答案后,我發現即使在第二個示例中,刪除...state也會導致與第一個示例相同的行為,所以這個問題問是錯誤的。我不確定是什么導致了錯誤的行為,并對造成的任何不便表示歉意。布萊恩的回答很好地解釋了用途。比較以下 2 個代碼片段,它們通過使用 一次更新 2 個狀態來完成相同的操作initialState,除了一個使用useState,另一個使用useReducer:useStateconst {useState} = React;const initialState = { name: 'John', age: 20};const Example = () => { const [state, setState] = useState(initialState); const handleName = () => { setState({...state, name: 'Tom'}); } const handleAge = () => { setState({...state, age: 30}); } return ( <div> <p>{state.name}</p> <p>{state.age}</p> <button onClick={handleName}> Click to change name </button> <button onClick={handleAge}> Click to change age </button> </div> );};ReactDOM.render( <Example />, document.getElementById("react"));<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script><div id="react"></div>如果在第一個示例中刪除...state,它將狀態設置為單個鍵/值對,因此不再起作用。我原以為第二個例子中會發生同樣的事情,但事實并非如此。第二個示例在刪除擴展運算符后效果很好。我對第二個例子有3個問題:擴展運算符有什么用?為什么刪除擴展運算符后它仍然有效?如果沒有擴展運算符也能正常工作,這是否意味著第二個示例中不需要擴展運算符?
useReducer 中是否需要使用展開運算符?
弒天下
2023-08-24 10:31:07