当前位置: 首页 > 面试题库 >

ESLint-组件应被编写为纯函数(react preferred / stateless function)

苍和裕
2023-03-14
问题内容

ESLint在react项目上给了我这个错误。

ESLint-组件应被编写为纯函数(react preferred / stateless function)

它指向组件的第一行。

export class myComponent extends React.Component {
render() {
    return (

      //stuff here

    );
  }
}

如何摆脱这个错误?


问题答案:

两种选择。

暂时停用警告

(未经测试;并且有多种方法可以执行此操作。)

// eslint-disable-next-line react/prefer-stateless-function
export class myComponent extends React.Component {
  ...
}

使用纯无状态组件

返回值就是将要呈现的值(例如,您基本上是在编写基于类的组件的render方法:

export const myComponent = () => {
  return (
    // JSX here
  )
}

(如果那是您的事,请使用非ES6表示法。)

对于没有其他支持逻辑的此类组件,我更喜欢隐式返回,例如,

export MyComponent = () =>
  <div>
    // Stuff here
  </div>

这是优先事项。我要说的是,您应该遵循React命名约定,并保持所有组件以大写字母开头。

ESLint可能会抱怨缺少多行JSX表达式周围的括号,因此请禁用该规则或使用括号。

如果需要道具,它们将作为参数传递给函数:

const MyComponent = (props) =>
  <div>
    <Something someProp={props.foo} />
  </div>

export MyComponent

为了方便起见,您可以像往常一样对参数进行解构:

const MyComponent = ({ foo }) =>
  <div>
    <Something someProp={foo} />
  </div>

如果您使用的是本地var,这可以使隐式返回变得容易一些。PropTypes除非声明它们,否则您会收到有关丢失的ESLint警告。因为它不是一个类,所以您不能简单地static propTypes在该类中使用它,因此必须将它们附加到该函数上(无论如何,这还是很多人喜欢的)。



 类似资料:
  • 我试着实现了一个列表容器,并决定将一些通用函数如< code>sum()移到基类,这样我就可以在其他容器中重用它们。 所有的基本支持类需要的是三个方法 empty()、 和 。我不能使这些纯粹的虚拟,因为支持类永远不会被实例化。但它仍然必须使用这些方法来实现自己的方法,如 我试过这样的东西: 但是尝试使用< code>sum()会导致编译错误 对于、和中的每一个。 有什么建议吗?

  • 很多组件的渲染输出由它的 props 决定。事实上,如果一个组件的渲染输出完全取决于它的 props,那么它会让测试变得简单,就好像断言不同参数的纯函数的返回值。看下面这个例子: <template> <p>{{ msg }}</p> </template> <script> export default { props: ['msg'] } </script> 你可以在

  • 我的react组件的构造函数被调用了两次,但我不知道为什么。我正在使用react redux存储我的应用程序的语言。我有一个基于浏览器语言设置默认语言的函数。LoginPage是第一个获得render的组件,因此我在其构造函数中调用了我的函数。基本上,它所做的就是比较并分派一个动作。当我用redux开发工具检查我的状态时,我看到它被调度了两次。我在构造函数中打印了虚拟数据,它也打印了两次。 登录页

  • 什么是纯函数? 在函数式编程里我们会经常谈到这两个概念。一个是 纯函数。另一个是 附加作用(副作用)。这里我们就结合实际来介绍一下 纯函数 和 附加作用。 下面我们给出两个函数 increaseA 和 increaseB,他们其中一个是 纯函数,另一个不是 纯函数: var state = 0 func increaseA() { state += 1 } increaseA() p

  • 问题 你想编写一个C扩展函数来操作数组,可能是被array模块或类似Numpy库所创建。 不过,你想让你的函数更加通用,而不是针对某个特定的库所生成的数组。 解决方案 为了能让接受和处理数组具有可移植性,你需要使用到 Buffer Protocol . 下面是一个手写的C扩展函数例子, 用来接受数组数据并调用本章开篇部分的 avg(double *buf, int len) 函数: /* Call