可以在不编写任何类的情况下使用reactjs吗?

问题描述 投票:-1回答:4

我想知道,如果类只是原型的语法糖,并且es6增强了函数编码,我们是否可以纯函数地编写reactJS代码(并且不会遗漏生命周期方法)?

[编辑]

想想最复杂的反应应用程序,可以纯粹在功能上编写 - 这样做有意义吗?

编辑2019年5月:React Hooks在这里:https://reactjs.org/docs/hooks-reference.html

reactjs ecmascript-6 functional-programming
4个回答
2
投票

ES6类是函数的语法糖,(有一些例外)可以将它们重写为函数,这就像Babel和TypeScript这样的转换器。

由于组件类继承自React.Component,因此需要从原型继承它。 React.Component没有静态属性,因此组件不需要继承它们。

这个组件

class App extends React.Component {
  state = { name: 'foo' };

  componentDidMount() {
    this.setState({ name: 'bar'});
  }

  render() {
    return <p>{this.state.name}</p>;
  }
}

function App(props) {
  React.Component.call(this, props);
  this.state = { name: 'foo' };
}

App.prototype = Object.create(React.Component.prototype);
App.prototype.constructor = App;

App.prototype.componentDidMount = function () {
  this.setState({ name: 'bar'});
};

App.prototype.render = function () {
  return React.createElement('p', null, this.state.name);
};

这是现在已经弃用的React.createClass最初做的,create-react-class帮手serves this purpose

如果类只是原型的语法糖,并且es6增强了函数编码,那么我们是否可以纯函数地编写reactJS代码(并且不会错过生命周期方法)?

我们可以,但功能组件与使用desugared JavaScript类编写的组件不同。 Functional component是特定的React术语,指无状态功能组件。无状态组件没有状态和生命周期挂钩。用单独的无状态组件编写真正的React应用程序是不可能的,或者至少是不切实际的。

想想最复杂的反应应用程序,可以纯粹在功能上编写 - 这样做有意义吗?

故意避免使用ES6类语法通常没有意义,因为缺少语法糖导致冗长和无表达的代码而没有任何好处。常规的React应用程序仍然需要使用构建步骤和Babel来转换JSX语法,因为desugared JSX是详细的React.createElement调用的层次结构。只有在不需要构建步骤的非React ES5应用程序中使用很少的React组件时,它才是实用的。

但是,这可能适用于第三方库,例如recompose。它旨在与功能组件一起使用,例如lifecycle帮助程序允许将生命周期挂钩附加到它们。当然,它在内部使用组件类来做到这一点。


2
投票

你可以使用无状态组件

这篇文章解释

https://hackernoon.com/react-stateless-functional-components-nine-wins-you-might-have-overlooked-997b0d933dbc

示例:用于无状态组件

import React from ‘react’;

const HelloWorld = ({name}) => (
 <div>{`Hi ${name}`}</div>
);

export default HelloWorld;

1
投票

注意:我的示例缺少@ estus实现的生命周期方法,因此如果您不需要这些生命周期方法,那么您可以使用下面的代码

是的你可以

import React from ‘react’;

function MyComponent(){
 return <div>Hello</div>
}

export default MyComponent;

Live Example


0
投票

不,这不是一种做事的方式。 React为我们提供了两种类型的组件。我们将它们用于特定目的。不是所有东西都可以用无状态组件(函数)编写。无状态组件通常是只呈现jsx且没有本地状态的表示组件。我们不能在无状态组件中编写方法,这里是有状态组件(基于类),我们管理自己的状态并将方法写入其中。此外,它为我们提供了更多控制来渲染我们的子组件。所以反应中的一切都遵循一种模式,它允许利用单向绑定的力量。

© www.soinside.com 2019 - 2024. All rights reserved.