函数组合、React组件和React hooks
刚开始
React受到喜爱的原因之一是因为它可以像普通函数一样编写。React的函数组件可以像函数一样进行合成。React hooks也是普通函数,因此可以进行合成。我想通过简单的例子来解释,这样可能更容易理解,下面我来写一下。
常规的JavaScript
如果没有函数(只需一个选择),可以如下所示。
const main = (args) => {
const a = args[0] * 2;
const b = args[1] * 2;
console.log([a, b]);
return a + b;
};
函数可以用于增加可重复使用性。
const double = (x) => x * 2;
const main = (args) => {
const a = double(args[0]);
const b = double(args[1]);
console.log([a, b]);
return a + b;
};
此外,即使只使用一次的函数,为了使其名称更易读,有时也会将其函数化。
const double = (x) => x * 2;
const printForDebug = (x) => console.log(x);
const main = (args) => {
const a = double(args[0]);
const b = double(args[1]);
printForDebug([a, b]);
return a + b;
};
這只是一個簡單的例子,這是普通的JavaScript情境。
React组件
React组件可以被编写成返回React节点的函数。由于通常使用JSX编写,因此可以按照以下示例进行编写。
const App = () => {
return (
<div>
<h1>Hello</h1>
<h2>World</h2>
</div>
);
};
将此分割为函数并进行组合,可以按如下方式编写。
const Title = () => <h1>Hello</h1>;
const Subtitle = () => <h2>World</h2>;
const App = () => {
return (
<div>
{Title()}
{Subtitle()}
</div>
);
};
这将产生完全相同的结果。因为它只是一个函数。
然而,这种模式可能很少见,而且实际上是不推荐的。推荐的写法应该是这样的。
const Title = () => <h1>Hello</h1>;
const Subtitle = () => <h2>World</h2>;
const App = () => {
return (
<div>
<Title />
<Subtitle />
</div>
);
};
这种写法可能被认为是眼熟的。这是因为React可以控制调用Title和Subtitle函数的时机,所以推荐使用这种写法。