小能豆

使用 React hooks 处理输入

javascript

我发现有几种方法可以用钩子处理用户的文本输入。哪种方法更可取或更合适?你会使用哪种方法?

1)处理输入的最简单的钩子,但是字段越多,需要编写的重复代码就越多。

const [username, setUsername] = useState('');
const [password, setPassword] = useState('');

事件:

onChange={event => setPassword(event.target.value)}
onChange={event => setUsername(event.target.value)}

2)与上面的例子类似,但使用动态键名

const [inputValues, setInputValues] = useState({
  username: '', password: ''
});

const handleOnChange = event => {
  const { name, value } = event.target;
  setInputValues({ ...inputValues, [name]: value });
};

事件:

onChange={handleOnChange}

3) 的替代方案useState,正如 ReactJS 文档中所说,useReducer通常比 更可取useState

const [inputValues, setInputValues] = useReducer(
  (state, newState) => ({ ...state, ...newState }),
  {username: '', password: ''}
);

const handleOnChange = event => {
  const { name, value } = event.target;
  setInputValues({ [name]: value });
};

事件:

onChange={handleOnChange}

4)useCallback将返回回调的记忆版本,只有当其中一个依赖项发生变化时,该版本才会改变。

const [inputValues, setInputValues] = useState({ 
  username: '', password: '' 
});

const handleOnChange = useCallback(event => {
  const { name, value } = event.target;
  setInputValues({ ...inputValues, [name]: value });
});

事件:

onChange={handleOnChange}

阅读 36

收藏
2024-06-10

共1个答案

小能豆

如何编写一个可重用的函数来返回输入值…及其<input>本身:

 function useInput({ type /*...*/ }) {
   const [value, setValue] = useState("");
   const input = <input value={value} onChange={e => setValue(e.target.value)} type={type} />;
   return [value, input];
 }

然后可以将其用作:

 const [username, userInput] = useInput({ type: "text" });
 const [password, passwordInput] = useInput({ type: "text" });

 return <>
   {userInput} -> {username} <br />
   {passwordInput} -> {password}
 </>;
2024-06-10