Обзор статьи
Реагировать в версии16.3-alpha
Представлен новый Context API, и сообщество с нетерпением ждет его. Давайте сначала посмотрим, как выглядит новый Context API на простом примере, а затем кратко обсудим значение нового API.
Полный пример кода в этой статье можно найти на GitHub автора,Нажмите на портал.
Взгляните на новый Context API
необходимо установить16.3-alpha
версия реакции. Этапы строительства не являются предметом этой статьи, вы можете обратиться к авторудемо на GitHub.
npm install react@next react-dom@next
Ниже посмотрите непосредственно на код, если он используетсяreact-redux
Это должно быть знакомо.
Сначала создайтеcontext
Пример:
import React from 'react';
import ReactDOM from 'react-dom';
// 创建context实例
const ThemeContext = React.createContext({
background: 'red',
color: 'white'
});
Затем определитеApp
компонент, обратите внимание, что он используется здесьProvider
Компонент, аналогичныйreact-redux
изProvider
компоненты.
class App extends React.Component {
render () {
return (
<ThemeContext.Provider value={{background: 'green', color: 'white'}}>
<Header />
</ThemeContext.Provider>
);
}
}
Далее определитеHeader
,Title
компоненты. Уведомление:
-
Title
используются компонентыConsumer
компонент, который означает потребностьProvider
переданные данные. -
Title
компонентApp
из孙
компонент, но пропущенHeader
данные о потреблении.
class Header extends React.Component {
render () {
return (
<Title>Hello React Context API</Title>
);
}
}
class Title extends React.Component {
render () {
return (
<ThemeContext.Consumer>
{context => (
<h1 style={{background: context.background, color: context.color}}>
{this.props.children}
</h1>
)}
</ThemeContext.Consumer>
);
}
}
Наконец-то нормальная работа
ReactDOM.render(
<App />,
document.getElementById('container')
);
Взгляните на результат работы программы:
Зачем нужен новый Context API
использовалredux + react-redux
Если вы студент, вы должны найти новый Context API очень знакомым. и виделreact-redux
Изучающие исходный код будут знать,react-redux
Он основан на старой версии Context API.
Зачем нужен новый Context API, когда уже есть решения?
- Есть определенные проблемы в реализации существующего Context API: например, когда родительский компонент
shouldComponentUpdate
Оптимизация производительности может привести к тому, что подкомпоненты, использующие контекстные данные, не будут обновляться. - Снижение сложности: такие решения, как ведро семейства redux, вносят определенную степень сложности в проект, особенно для учащихся, которые недостаточно знают о решении, они могут растеряться, когда столкнутся с проблемами. Внедрение нового Context API может в определенной степени снизить зависимость многих проектов от корзины семейства redux.
Для получения дополнительной информации, пожалуйста, обратите внимание на мою общедоступную учетную запись и обновите ее позже.
написать на обороте
Лично новый Context API больше ожидает улучшения производительности. Что касается уменьшения сложности, замены избыточности и т. д., это не моя цель. Следующим планом является создание нескольких точечных вариантов использования для сравнительного тестирования.