假设我定义了一个简单的 React 功能组件,如下所示:
const Greeter1 = ({name}) => <h1>Hello {name}</h1>;
我还可以定义一个等效的普通 JS 函数,它返回一个 React 元素,如下所示:
const Greeter2 = name => <h1>Hello {name}</h1>;
“React”版本当然也只是一个普通的 JS 函数,接收的是一个 JS 对象而不是一个字符串。我们可以在普通 JS 中使用这些函数中的任何一个来获取给定名称的欢迎元素,只是调用者语法略有不同:
const greeterElement1 = Greeter1({ name: "Bob" });
const greeterElement2 = Greeter2("Bob");
不过,在 React 表达式中,我们可以通过几种不同的方式调用这些函数:
const someReact1 = <div>{ Greeter2("Bob") }</div>;
const someReact2 = <div>{ Greeter1({ name: "Bob" }) }</div>;
const someReact3 = <div><Greeter1 name="Bob" /></div>;
我的问题:除了语法美学之外,这些调用风格之间是否存在任何有效差异?我假设someReact1
和someReact2
几乎相同,但我不确定someReact3
. 使用 React 组件语法是否会改变 React 处理事物的方式?它是否以任何方式影响行为或性能?还是仅仅是语法糖?
当在虚拟 DOM 树上做一个 diff 时,如果它的属性在渲染之间没有改变,React 是否放弃在功能组件内进行比较?如果是这样,我是否正确地假设在直接调用函数时会丢失优化someReact1
?
我想知道 b/c 在某些情况下我实际上更喜欢 的风格,someReact1
因为它允许我更轻松地使用函数式编程技术,例如柯里化,而且有时在调用时不必指定参数名称也很好。但是我这样做是否要付出某种代价?我最好坚持使用传统语法吗?