2017-01-22 3 views
2

Я читал документы об эффективности, но не могу найти ответ на свой вопрос ...Как визуализировать компоненты React только один раз при запуске?

У меня есть куча кнопок на моем приложении, которые будут отображаться на основе некоторых свойств, но не состояния, родительских компонентов никогда не изменят свои свойства. Затем у меня есть этот обработчик событий onKeyDown, который будет прослушивать некоторые ключи и обновлять другой компонент.

Моя проблема заключается в том, что при нажатии клавиш и обновлении этого одного компонента все остальные кнопки будут отображаться тоже (наблюдается через инструменты React dev для Chrome). Я не реализовал shouldComponentUpdate(nextProps, nextState) на моих кнопках, но не должен ли React иметь это поведение по умолчанию? Я имею в виду, сравните this.props с nextProps, и если они точно такие же, не звоните render()?

Я должен сделать это самостоятельно для каждого компонента, который должен отображаться только один раз при запуске приложения?

EDIT:PureComponent кажется решить проблему ... Но вместо того, чтобы создать новый вопрос, я обновляю это с связанным с этим вопросом:

Почему бы документацией рекомендовать, чтобы все компоненты на основе PureComponent по умолчанию? Каковы аргументы против использования PureComponent по умолчанию вместо типичного Component?

+0

У вас есть проблема с производительностью или это просто красота, которую вы хотели бы не обновлять эти кнопки? – mguijarr

+0

Последний, он просто не чувствует себя хорошо ... Я знаю, это может быть только преждевременная оптимизация. Но я просто спрашиваю :) –

+0

Посмотрите на React.PureComponent вместо React.Component (см. Https://facebook.github.io/react/docs/react-api.html) – mguijarr

ответ

3

Чистые компоненты должны решить вашу проблему, потому что по умолчанию они реализуют сравнение неглубоких опор и состояний.

Link to the docs.

Если ваш React функции компонента визуализации() делает тот же результат, учитывая тот же реквизит и состояние, вы можете использовать React.PureComponent для увеличения производительности в некоторых случаях.

+0

Я пробовал те (забыл упомянуть о вопросе), но инструменты React dev все еще показывали все кнопки, которые были визуализированы при каждом нажатии клавиши. Правильно ли я должен использовать этот класс вместо стандартного, и ничего не нужно делать? –

+0

С другой стороны, это сработало ... Извините. Но это задает вопрос, почему в документации не рекомендуется устанавливать все компоненты на основе 'PureComponent' по умолчанию? –

+0

@RicardoAmaral Они не реализуют его по умолчанию из-за краевых случаев. Не уверен, что это такое. Я просто что-то читал. –

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