Недавно (2018-10-23) React официально выпущен16.6
Версия, откройте кучу новых функций, а некоторые из которых являются новыми функциями, оно представляет будущее развитие реагирования, которое позволяет нам заглянуть в будущее сейчас.
lazy
Самая ожидаемая функция, безусловно,lazy
функцию и выпустилSuspense
компонент, который первоначально называлсяPlaceholder
компоненты, используемые для сопряженияrender
Асинхронная операция внутри метода, давайте сначала посмотримlazy
Применение
import React, {lazy, Suspense} from 'react';
const OtherComponent = lazy(() => import('./OtherComponent'));
function MyComponent() {
return (
<Suspense fallback={<div>Loading...</div>}>
<OtherComponent />
</Suspense>
);
}
сделалcode-splitting
студенты могут чувствовать знакомый запах. Если раньше мы использовали сторонний пакет или сами обрабатывали асинхронный процесс, то теперь React поддерживает его нативно, и вы можете напрямую кинуть асинхронный процесс вrender
В методе это то же самое, что писать обычные компоненты, и его можно легко передатьSuspense
компоненты для обеспеченияfallback
Однако это не толькоSuspense
Единственное использование, по сути, на этот раз React официально открытSuspense
Компоненты представляют все асинхронные операции, которые могут бытьrender
Способы какие делают, на самом деле меня удивили, я думал конечно придется подождать до официального открытия 17 версии
Итак, что еще могут делать асинхронные операции? Если школьники увидели начало годаDanРазделяя в Исландии, вы должны знать,Suspense
Это делает операцию загрузки данных очень простой для нас. Студенты, которые не видели, могут посмотретьздесь, теперь есть еще и пакет на npm, обеспечивающий функцию загрузки данных,simple-cache-provider, но пока не используйте его в формальной среде.
О том, как реализована эта часть, я подробно объясню позже в анализе исходного кода, а заинтересованные студенты могут подписаться на меня.
React.memo
ClassComponent
класс может быть унаследованPureComponent
или реализоватьshouldComponentUpdate
для активного определения необходимости повторного рендеринга компонента для повышения производительности, ноFunctionalComponent
Аналогичной функции пока нет.
Итак, сегодня React выпустилReact.memo
метод для достижения чего-то вродеPureComponent
функция,поверхностное сравнениеprops
Есть ли изменение, если нет изменений, не перерисовывать текущий компонент
const FunctionalComponent = React.memo((props) => {
// only render if props change
})
static contextType
В React 16.3 мы предоставляем стандартную замену старойcontext
API, то естьReact.createContext
, то черезcontext.Provider
а такжеcontext.Consumer
Чтобы обеспечить ценность, этот подход устраняет старыеcontext
Проблема низкой производительности API,Я также подробно разбирал этот вопрос ранее, и заинтересованные студенты могут прочитать егоздесь, а старого кода API много, поэтому в следующей основной версии React старый API будет удален.
Однако в процессе обновления экологического плагина до нового API кто-то предложилClassComponent
Использовать новый API обременительно (??? я его не чувствую), поэтому React предоставляетClassComponent
Использование новых методов API
import React, { Component } from 'react';
const context = React.createContext('defaultValue')
const ProviderComp = ({ children }) => (
<context.Provider value="provider">
{children}
</context.Provider>
)
class ConsumerComp extends Component {
static contextType = context
componentDidMount() {
console.log(this.context)
}
render() {
return (
<p>{this.context}</p>
)
}
}
class App extends Component {
render() {
return (
<ProviderComp>
<ConsumerComp />
</ProviderComp>
);
}
}
по заявлениюstatic contextType = context
,ПозволятьClassComponent
Можно подписаться на самый последнийcontext provider
,обратите внимание здесьcontextType
Это фиксированное объявление, и оно не будет работать, если вы измените его на другое имя.. еслиConsumerComp
не вProvider
поддерево, затем используйтеdefaultValue
class App extends Component {
render() {
return (
<>
<ProviderComp />
<ConsumerComp /> // show default value
</>
);
}
}
Это также попытка удалить старые API для повышения общей производительности React.
static getDerivedStateFromError()
ПроводкаError Boundaries
React предоставляет новый метод жизненного цикла, когдаcomponentDidCatch
, он будет срабатывать при обнаружении ошибки, вы можете изменить его в немstate
Чтобы отобразить пользовательский интерфейс напоминания об ошибке или отправить информацию об ошибке на сервер дляlog
для постанализа. Но вот проблема,В момент обнаружения ошибки React отобразит компонент какnull
, что может привести к тому, что его родительский компонент установит указанное вышеref
получатьnull
вызвать некоторые проблемы, поэтому этот метод теперь предоставляется.
Этот метод аналогиченgetDerivedStateFromProps
Аналогично, разница только в том, что он срабатывает только при возникновении ошибки, он относительныйcomponentDidCatch
Преимущество в том, что его можно изменить в текущем цикле рендеринга.state
, чтобы в текущем рендеринге мог появиться неправильный пользовательский интерфейс без необходимостиnull
промежуточное состояние.
Появление этого метода также означает, что при возникновении ошибки в будущем модифицируйтеstate
Делать это нужно здесь, а последующий сбор информации об ошибках и тому подобное помещается вcomponentDidCatch
в.
Новое напоминание в StrictMode
StrictMode
Он используется, чтобы напомнить разработчикам об использовании API, которые скоро устареют, напримерcomponentWillMount
Эти циклы объявлений будут напоминаться На этот раз добавлены два новых напоминания API.ReactDOM.findDOMNode()
, и старыйcontext api
.
Это также означает, что эти две следующие основные версии определенно будут удалены. Так что братья, не торопитесь и обновляйтесь!
Я Джоки, фронтенд-инженер, который фокусируется на навыках React и глубоком анализе React определенно является фреймворком, который чем больше вы изучаете, тем больше вы чувствуете, что его дизайн сложный и думает наперед. Подписывайтесь на меня, чтобы получать последние новости о React и самые глубокие знания о React.Больше статей здесь