Можно ли использовать responsejs без написания какого-либо класса? - PullRequest
0 голосов
/ 02 сентября 2018

Мне интересно, если классы являются просто синтаксическим сахаром для прототипов, а es6 улучшает функциональное кодирование, можем ли мы написать кодactJS чисто функционально (и не упустить методы жизненного цикла)?

[править]

Подумайте о самом сложном приложении реакции, может ли оно быть написано чисто функционально - и имеет ли смысл это делать?

РЕДАКТИРОВАТЬ 2019 Май: React Hooks здесь: https://reactjs.org/docs/hooks-reference.html

Ответы [ 4 ]

0 голосов
/ 02 сентября 2018

Классы 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 улучшает функциональное кодирование, можем ли мы писать кодactJS чисто функционально (и не упускать из виду методы жизненного цикла)?

Мы можем, но функциональный компонент - это не то же самое, что компонент, написанный с использованием класса JavaScript. Функциональный компонент является специфическим термином React, относящимся к без состояния функциональному компоненту. Компоненты без состояния не имеют хуков состояния и жизненного цикла. Невозможно или, по крайней мере, нецелесообразно писать настоящее приложение React с использованием только компонентов без состояния.

Подумайте о самом сложном приложении реакции, может ли оно быть написано чисто функционально - и имеет ли смысл это делать?

Умышленное уклонение от синтаксиса класса ES6 в общем случае не имеет смысла, поскольку отсутствие синтаксического сахара приводит к многословному и невыразительному коду без каких-либо преимуществ. Обычному приложению React все еще нужно использовать шаг сборки и Babel для передачи синтаксиса JSX, потому что desugared JSX представляет собой иерархию подробных вызовов React.createElement. Это практично, только если в приложении, не являющемся React ES5, используется несколько компонентов React, для которых не требуется вводить этап сборки.

Однако это возможно при использовании сторонних библиотек, например, recompose. Он предназначен для использования с функциональными компонентами, например, Помощник lifecycle позволяет прикрепить к ним крючки жизненного цикла. Конечно, для этого он использует класс компонента внутри.

0 голосов
/ 02 сентября 2018

вы можете использовать компонент без сохранения состояния

Эта статья объясняет

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;
0 голосов
/ 02 сентября 2018

Нет, это не способ делать вещи. Реакт дает нам два типа компонентов. Мы используем их для определенной цели. Не все может быть записано в компонентах (функциях) без состояния. Компоненты без сохранения состояния обычно представляют собой компоненты представления, которые отображают только jsx и не имеют локального состояния. Мы не можем писать методы в компонентах без состояния, и вот идут компоненты Stateful (основанные на классах), где мы управляем собственным состоянием и записываем в него методы. Кроме того, это дает нам больше возможностей для визуализации наших дочерних компонентов. Таким образом, все реагирует по шаблону и позволяет использовать силу одностороннего связывания.

0 голосов
/ 02 сентября 2018

ПРИМЕЧАНИЕ : В моем примере отсутствуют методы жизненного цикла, реализованные @ estus, поэтому, если вам не нужны эти методы жизненного цикла, вы можете использовать приведенный ниже код

Да, вы можете

import React from ‘react’;

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

export default MyComponent;

Живой пример

...