javascript - 在 nextjs 应用程序中,如何从另一个组件触发一个组件中的功能
问题描述
正如标题所说,我在一个简单的 NextJS 应用程序的页面上有 2 个自定义组件:
<section>
<CompA></CompA>
<CompB></CompB>
</section>
如何让 CompB 中的按钮触发 CompA 中包含的函数?
我认为我应该以某种方式使用状态,但我有点迷失如何在 NextJS 中做到这一点。这里的简单代码示例:https ://github.com/Chenzo/nextjs-comp-to-comp
解决方案
从技术上讲,您可以使用useImperativeHandle
hook 来做到这一点,但这并不完全是“React 方式”:
const CompA = forwardRef(({ children }, ref) => {
useImperativeHandle(ref, () => ({
doSmth: () => {
console.log('CompA - function');
},
}));
return (
<div>
<h2>Component A</h2>
</div>
);
});
const CompB = ({ onClick }) => {
return (
<div>
<h2>Component B</h2>
<button onClick={onClick}>Trigger CompA function</button>
</div>
);
};
export default function Home() {
const compARef = useRef();
const handleCompBClick = useCallback(() => compARef.current?.doSmth(), []);
return (
<section>
<CompA ref={compARef}></CompA>
<CompB onClick={handleCompBClick}></CompB>
</section>
);
}
正如我上面所写,很可能有一种更正确的方法来解决您的问题,避免使用命令式方法。该决定将取决于组件 A 和 B 在实际应用程序中的确切用途。
推荐阅读
- javascript - TypeError:无法解构“pres [0]”的属性“标题”,因为它未定义。(反应)
- embedded - 我需要自己的 bsp 层吗?应该放什么?
- wordpress - 我可以在 nginx 中使用我已经在 wordpress 网站上使用过的域名吗?
- sql - SQL ORDER BY 在 TABLESAMPLE BERNOULLI 之前,或在 Python 中
- webrtc - 如何检查传入流是屏幕流还是相机流
- node.js - 运行 nodejs 脚本以从本地计算机创建表终止 Cloud SQL 连接
- reactjs - 我在 WP 平台上使用 React 渲染 ACF 插件的所见即所得字段时遇到问题
- javascript - 在两个输入具有相同密码之前不允许结束操作
- c# - 比较标签和输入(文本框)中的字符串并在标签中显示结果。数组上的加号操作
- python - SQL Python,在 Where 语句中处理一个或多个值