我想知道,如果类只是原型的语法糖,而 es6 增强了函数式编码,我们是否可以纯粹从功能上编写 reactJS 代码(并且不会错过生命周期方法(?
[编辑]
想想最复杂的 react 应用程序,它可以纯粹从功能上编写吗 - 这样做有意义吗?
编辑2019年5月: React Hooks 在这里: https://reactjs.org/docs/hooks-reference.html
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
帮助程序用于此目的。
如果类只是原型的语法糖,而 es6 增强了函数式编码,我们是否可以纯粹从功能上编写 ReactJS 代码(并且不会错过生命周期方法(?
我们可以,但是函数组件与用脱糖的JavaScript类编写的组件不是一回事。 功能组件是特定的 React 术语,指的是无状态的功能组件。无状态组件没有状态和生命周期挂钩。仅使用无状态组件编写真正的 React 应用程序是不可能的,或者至少是不切实际的。
想想最复杂的 react 应用程序,它可以纯粹从功能上编写吗 - 这样做有意义吗?
故意避免使用 ES6 类语法通常没有意义,因为缺乏语法糖会导致冗长和缺乏表达的代码,没有任何好处。一个常规的 React 应用程序仍然需要使用构建步骤和 Babel 来转译 JSX 语法,因为脱糖的 JSX 是详细React.createElement
调用的层次结构。只有在不需要引入构建步骤的非 React ES5 应用程序中使用很少的 React 组件时才实用。
但是,这可以通过第三方库实现,例如recompose
.它旨在与功能组件一起使用,例如lifecycle
助手允许将生命周期钩子附加到它们。当然,它在内部使用组件类来做到这一点。
您可以使用无状态组件
本文解释
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;
注意: 我的示例缺少@estus实现的生命周期方法,因此,如果您不需要这些生命周期方法,则可以使用以下代码
是的,你可以
import React from ‘react’;
function MyComponent(){
return <div>Hello</div>
}
export default MyComponent;
现场示例
不,这不是一种做事的方式。React 为我们提供了两种类型的组件。我们将它们用于特定目的。并非所有内容都可以用无状态组件(函数(编写。无状态组件通常是仅呈现 jsx 且没有本地状态的表示组件。我们不能在无状态组件中编写方法,这里有有状态组件(基于类(,我们在其中管理自己的状态并将方法写入其中。此外,它还为我们提供了更多的控制权来呈现我们的子组件。因此,反应中的所有内容都遵循一种模式,它允许利用单向绑定的力量。