gpt4 book ai didi

javascript - React 函数式组件(不再使用类组件)内部的箭头函数和常规函数有什么区别?

转载 作者:行者123 更新时间:2023-11-29 16:31:31 39 4
gpt4 key购买 nike

自从有了 React Hooks,我决定放弃 React 类组件。我现在只处理钩子(Hook)和功能组件。

简单问题:

我理解在类主体中使用箭头函数而不是常规函数的区别。箭头函数会自动绑定(bind)(lexical this)到我的类的实例,我不必在构造函数中绑定(bind)它。这很好。

但是因为我不再处理类,所以我想知道在功能组件内部执行以下操作有什么区别:

function App() {

// REGULAR FUNCTION
function handleClick1() {
console.log('handleClick1 executed...');
}

// ARROW FUNCTION
const handleClick2 = () => {
console.log('handleClick2 executed...');
}

return(
<React.Fragment>
<div className={'div1'} onClick={handleClick1}>
Div 1 - Click me
</div>
<div className={'div2'} onClick={handleClick2}>
Div 2 - Click me
</div>
</React.Fragment>
);
}

问题

两者都很好。

性能有差异吗?我应该选择一种方式而不是另一种方式吗?它们在每次渲染时都会重新创建,对吗?强>


关于可能重复的注意事项

我真的不认为这是一个重复的问题。我知道关于箭头和正则之间的区别有很多问题,但我想从 React 功能组件的 Angular 以及 React 如何处理它来了解。我环顾四周,没有找到。


用于测试的代码片段

function App() {

function handleClick1() {
console.log('handleClick1 executed...');
}

const handleClick2 = () => {
console.log('handleClick2 executed...');
}

return(
<React.Fragment>
<div className={'div1'} onClick={handleClick1}>
Div 1 - Click me
</div>
<div className={'div2'} onClick={handleClick2}>
Div 2 - Click me
</div>
</React.Fragment>
);
}

ReactDOM.render(<App/>, document.getElementById('root'));
.div1 {
border: 1px solid blue;
cursor: pointer;
}

.div2 {
border: 1px solid blue;
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>

最佳答案

除了您已经指出的差异(词法作用域)之外,箭头函数(和函数表达式)提升,因此不能在定义之前调用。看我的例子。在我看来这不是问题,因为依赖提升的代码更难推理。

React 真的不关心你使用的是哪一个(它也不能检测到它)。

const A = () => {
const name = getName();

function getName() {
return 'praffn';
}

// Will not work
// const getName = () => 'praffn';

return <p>Hi, {name}</p>;
}

ReactDOM.render(<A/>, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

关于javascript - React 函数式组件(不再使用类组件)内部的箭头函数和常规函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55968738/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com