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