【发布时间】:2021-03-16 05:00:09
【问题描述】:
我正试图在一个带有功能组件和钩子的 React 应用程序中围绕数据流展开思考。
我想知道:
- 当数据更改(状态更改)导致执行级联代码时...什么代码(例如,在每个组件中运行和不运行...显然存在选择性,例如“不要放那个如果您不希望 那个 代码运行,则在 deps 数组中的变量")?
- 在这样的数据级联过程中,家庭树的“家庭”部分是如何确定的?数据会传递给兄弟姐妹吗?它是否只传给子代(如果传递了用于更新父代的函数,则传给父代)?
为了澄清我的想法,我在每个文件名的结尾都使用了这样的标签约定:我声称(并要求更正!)1 是 2 的父级; 2 是 3a 的父级(我认为……自定义挂钩可以是“子级”吗?)、3b 和 3c;而 3c 是 4c 的父级。
显然,父/子数据流是 React 的自然组成部分。兄弟姐妹之间呢?那是问题发生的地方吗?当然,在给定文件中“传递数据”可能是危险的(相对于控制是否以及何时渲染一段数据),显然解决方案是将数据“提升”到树上。但即便如此……如果不清楚数据如何回落……以及我们应该寻找什么问题,那么将数据提升一个(或更多)水平是没有意义的。
index1.tsx
...
<App/>
...
App2.tsx
...
const App = () => {
...
const {varFromCustomHook} = useAppLogic(varToCustomHook);
...
<FooComponent varToFoo={varToFoo} functToFoo={functToFoo}/>;
<BarComponent/>;
...
};
...
useAppLogic3a.tsx
...
interface Props {
varToCustomHook;
};
const useAppLogic (props: Props) {
...
return {varFromCustomHook};
};
FooComponent3b.tsx
...
interface Props {
varToFoo;
functToFoo;
}
const FooComponent = (props: Props) => {
...
funcToFoo(importantData);
...
<div>{varToFoo}</div>;
...
};
BarComponent3c.tsx
...
const BarComponent = () => {
...
<FoobarComponent/>;
...
};
FoobarComponent4c.tsx
...
const FoobarComponent = () => {
...
};
【问题讨论】:
标签: reactjs react-hooks state react-functional-component