reactjs - 将钩子或函数传递给子组件
问题描述
使用 Hooks 在 React 中更改状态的首选方法是什么?
选项1:我认为这是更“传统”的
function App() {
const [input, setInput] = useState('');
const onInputChange = (event) => {
setInput(event.target.value)
};
return (
<div className='App'>
<Form onInputChange={onInputChange} />
</div>
);
}
const Form = ({ onInputChange }) => {
return (
<div>
<div>
<div>
<input
type='text'
onChange={onInputChange}
/>
<button'>
Submit
</button>
</div>
</div>
</div>
);
};
export default Form;
选项2:但我见过人们这样做
function App() {
const [input, setInput] = useState('');
return (
<div className='App'>
<Form onInputChange={setInput} />
</div>
);
}
export default App;
const Form = ({ onInputChange }) => {
return (
<div>
<div>
<div>
<input
type='text'
onChange={(e) => {
onInputChange(e.target.value);
}}
/>
<button>
Submit
</button>
</div>
</div>
</div>
);
};
export default Form;
在 App 组件的选项 1 中,更改其状态的逻辑就在那里。在选项 2 中,更改 App 组件的逻辑是在子组件中,对吧?
如果我理解正确,我认为选项 1 更有意义。你怎么看?
解决方案
选项 1 更好,因为我们只需将道具或数据传递给子组件而不是逻辑,逻辑必须驻留在父组件中。
推荐阅读
- html - 如何删除引导网格列的默认填充
- c# - 是否可以在 activemq 中以编程方式创建用户而不更改 activemq.xml 文件
- bpmn - “为活动抛出补偿”和“为当前范围抛出补偿”是什么意思?
- spring - 与 SpringBoot 一起使用的微服务架构和工具
- javascript - 无法使用 ES6 在 Canvas 中获得正确的位置(为什么这段代码不能正常工作?)
- reactjs - Ant Design Form 验证必填字段
- vue.js - Vue CLI 错误创建新项目(npm 错误)
- node.js - 使用 jest 对 aws lambda 进行单元测试
- c++ - C++ 不打印字符串
- python - 如何在 Python 输入中捕获特定单词