Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是react功能组件的良好实践吗?_Javascript_Reactjs_Functional Programming_Garbage Collection_Components - Fatal编程技术网

Javascript 这是react功能组件的良好实践吗?

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

最近,我以功能性的风格编写了越来越多的react组件,因为它们中的大多数不需要生命周期功能或状态。在我的组件(也就是函数)中,我定义了助手函数——onClick函数和所有的jazz函数。但现在我在想这是否是一个好的做法?由于每次渲染都会调用该函数,它是否会重新创建所有内部函数?我很好奇记忆力的丧失以及我是否做错了。。。。组件的一个示例:

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个月过去了,我很好奇您最终坚持了哪种方法?

使用其他函数或将无状态事件处理程序附加到其子元素/组件的功能组件没有问题。只有当您需要状态或生命周期挂钩时,才应该升级到有状态组件。使用其他功能或将无状态事件处理程序附加到其子元素/组件的功能组件没有问题。只有当您需要状态或生命周期挂钩时,才应该升级到有状态组件。