javascript - 将函数传递给子组件是个好主意吗?
问题描述
我有一个父子组件。
在子组件中,输入字段发生了变化,我想让父母知道这个变化。所以我现在这样做的方式是这样的。
//parent component
const [text, setText] = useState<any>('');
<childComponent :text={text} :setText={setText} />
//child component
export const childComponent: React.FC<childComponent> = ({
text,
setText
}) => {
return (
<input :value={text} onChange={(value) => setText(value)} />
)
}
这是正确的做法吗?也许我应该将普通函数从父级传递给子级,并且在父级的那个函数中,我应该调用setText
. 真的不确定。
我来自vue.js
我真正喜欢整个概念的世界$emit
。在孩子身上,你可以这样写:
<input onChange={(val) => { $emit('updateInput', val) } />
// and in the parent
<childComponent @updateInput={(val) => parentValue = val}
基本上,大多数时候,您不需要将功能从父母传递给孩子,我真的很喜欢这一点。
对于您如何在 React 中处理此问题,我将不胜感激。
解决方案
这很好,这是孩子与父母交流的常用方式。
然而,有一些事情需要考虑。当您直接在 JSX 模板中编写回调时,它会在每个渲染周期重新评估,这意味着每次都会创建一个新函数。
有两个 React 钩子可以帮助缓解这种情况(这可能会导致性能问题)useCallback
和useMemo
. 它们都有助于记忆函数,以便在进一步的渲染周期中再次发送它们。
推荐阅读
- spring-boot - 从 Springboot 应用程序访问 AWS Paramstore
- node.js - 按 MongoDb 日期过滤
- python - matplotlib - 将一天中的每一分钟绘制为 x 轴
- reactjs - 如何在 React 中将 Excel 电子表格转换为 CSV 文件?
- javascript - 为什么我不能解构“输入”以及如何获得我在请求中传递的“标题”?
- javascript - 当它已经在 useEffect 回调中设置时,为什么在 const 中未定义 useState 变量?
- macos - 在 Mac OS Big Sur 上设置全局环境变量
- java - 使用 Jersey 测试框架测试 Jersey 3 Web 应用程序的问题
- javascript - 使用csv文件的java脚本函数
- javascript - 角节点HTTP客户端