2016-03-29 2 views
4

Синтаксис es6 для создания компонента React равен export default class ExampleComponent extends React.Component. Однако он все еще работает, когда export default class ExampleComponent без extends React.Component при условии, что import React from 'react'; почему это происходитне распространяются на React.Component

+0

Первый имеет доступ к методам жизненного цикла (например, 'componentDidMount'), а последний - нет; это статический компонент. – lux

+1

@lux У последнего есть доступ к 'render ', чтобы проверить это https://github.com/gaearon/flux-react-router-example – Guigui

+0

И только' render() ', в документации: https: // facebook. github.io/react/blog/2015/10/07/react-v0.14.html#stateless-functional-components -> '" Эти компоненты ведут себя так же, как класс React, только с определенным методом рендеринга "' – lux

ответ

3

Легко быть в этой ситуации и пропустить то, что происходит, но разница действительно огромная: без расширения React.Component вы просто создаете класс JS. Кроме того:

  • , потому что он удовлетворяет требованиям, предъявляемым к React класса (который вы можете создать либо React.createClass() или как класс ES6), он все равно «работа»,
  • но не будет получить методы lifeCyle или получить доступ к состоянию (кто-то исправит меня, если я ошибаюсь в этом, довольно уверен, что вы не будете просто с классом bc, если нет экземпляра поддержки).
  • эти «более простые» компоненты, как правило, быстрее реагируют на сделки и требуют меньше «механизмов», поскольку они - просто (надеюсь) чистая функция, которая что-то делает.
  • так, они имеют ключевое отличие в том, что только с классом, который имеет метод визуализации, вы не «требуете» столько же. этого должно быть достаточно больше всего того времени; Вам не нужен доступ к state для всех

Надеюсь, что это поможет!

+0

Реагировать на документацию по эту тему: https://facebook.github.io/react/docs/state-and-lifecycle.html. Я согласен с @markthethomas. Из документов: «... компоненты, определенные как классы, имеют некоторые дополнительные функции. Локальное состояние - это то, что: функция доступна только для классов». Документы не указывают это явно для крючков жизненного цикла, но то же самое верно для них. –

0

Вы создаете «чистый» JavaScript class, но раз он не расширяет React.Component, вы не сможете получить доступ к конкретному поведению React. Проверьте how extends work.

+0

проверьте это https://github.com/gaearon/flux-react -router-example, много компонентов React не расширяют React.Component, но все равно отлично работает – Guigui

+0

Я считаю, что это из-за этой устаревшей библиотеки: https://github.com/gaearon/react-pure-render –

Смежные вопросы