Обзор статьи
Реагировать в версии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 больше ожидает улучшения производительности. Что касается уменьшения сложности, замены избыточности и т. д., это не моя цель. Следующим планом является создание нескольких точечных вариантов использования для сравнительного тестирования.