Javascript 这是react功能组件的良好实践吗?
最近,我以功能性的风格编写了越来越多的react组件,因为它们中的大多数不需要生命周期功能或状态。在我的组件(也就是函数)中,我定义了助手函数——onClick函数和所有的jazz函数。但现在我在想这是否是一个好的做法?由于每次渲染都会调用该函数,它是否会重新创建所有内部函数?我很好奇记忆力的丧失以及我是否做错了。。。。组件的一个示例:Javascript 这是react功能组件的良好实践吗?,javascript,reactjs,functional-programming,garbage-collection,components,Javascript,Reactjs,Functional Programming,Garbage Collection,Components,最近,我以功能性的风格编写了越来越多的react组件,因为它们中的大多数不需要生命周期功能或状态。在我的组件(也就是函数)中,我定义了助手函数——onClick函数和所有的jazz函数。但现在我在想这是否是一个好的做法?由于每次渲染都会调用该函数,它是否会重新创建所有内部函数?我很好奇记忆力的丧失以及我是否做错了。。。。组件的一个示例: import React from 'react'; import { connect } from 'react-redux'; import Produc
import React from 'react';
import { connect } from 'react-redux';
import ProductSearch from '../Plan/components/ProductSearch';
const BlockedProducts = (props) => {
const onSelectProduct = (product_key) => {
console.log(product_key);
};
return (
<ProductSearch onSelectProduct={ onSelectProduct } />
);
};
export default connect()(BlockedProducts);
从“React”导入React;
从'react redux'导入{connect};
从“../Plan/components/ProductSearch”导入ProductSearch;
const BlockedProducts=(道具)=>{
const onSelectProduct=(产品密钥)=>{
控制台日志(产品密钥);
};
返回(
);
};
导出默认连接()(BlockedProducts);
是的,由于每次渲染BlockedProducts
时都要声明一个函数,因此性能肯定会受到一定的影响。我不知道从垃圾收集中清理垃圾的效率有多高,但似乎最好不要碰运气
React中的功能组件实际上是完全无状态的,除了表示之外,不“做”任何事情。理想的功能组件只返回一些要呈现的JSX/HTML,没有任何提示。在我看来,一个功能组件应该只有一个返回,一旦你开始添加内部函数,它就应该升级到一个完整的React类。是的,由于你每次渲染
BlockedProducts
时都要声明一个函数,因此肯定会对性能造成一些影响。我不知道从垃圾收集中清理垃圾的效率有多高,但似乎最好不要碰运气
React中的功能组件实际上是完全无状态的,除了表示之外,不“做”任何事情。理想的功能组件只返回一些要呈现的JSX/HTML,没有任何提示。在我看来,一个功能组件应该只有一个返回,一旦你开始添加内部功能,它应该升级到一个完整的React类。你可以将
onSelectProduct
声明从BlockedProducts
范围移到组件上方。它将关闭组件的作用域,因为BlockedProducts
声明将与onSelectProduct
位于同一作用域中
我不认为这会导致一些性能问题。我同意@jered的观点-无状态组件应该尽可能简单,因此尽量不要在其中创建任何业务逻辑。您可以将
onSelectProduct
声明从BlockedProducts
范围移到组件上方。它将关闭组件的作用域,因为BlockedProducts
声明将与onSelectProduct
位于同一作用域中
我不认为这会导致一些性能问题。我同意@jered的观点——无状态组件应该尽可能简单,所以尽量不要在那里建立任何业务逻辑。我最近也遇到了同样的问题。Daniel讨论了这种方法将增加GC工作负载,因此他使用类组件代替 我认为,首先,类组件用于处理生命周期和状态,它们还通过创建支持bean来影响性能,支持bean假定处理生命周期和状态 因此,我将使用functional类,并在出现实际性能问题时创建类组件
顺便说一句,10个月过去了,我很好奇你最终坚持了哪种方法?我最近也遇到了同样的问题。Daniel讨论了这种方法将增加GC工作负载,因此他使用类组件代替 我认为,首先,类组件用于处理生命周期和状态,它们还通过创建支持bean来影响性能,支持bean假定处理生命周期和状态 因此,我将使用functional类,并在出现实际性能问题时创建类组件
顺便说一句,10个月过去了,我很好奇您最终坚持了哪种方法?使用其他函数或将无状态事件处理程序附加到其子元素/组件的功能组件没有问题。只有当您需要状态或生命周期挂钩时,才应该升级到有状态组件。使用其他功能或将无状态事件处理程序附加到其子元素/组件的功能组件没有问题。只有当您需要状态或生命周期挂钩时,才应该升级到有状态组件。