Интерфейсный континент — это новый развивающийся сектор в мире технологий в последние годы.По мере того, как люди взаимодействуют с веб-сайтами и улучшают их производительность, количество призывателей, которые отправляются на внешний континент, чтобы попрактиковаться в Javascript, похоже на пересечение карася. река.Существует много способов культивирования, и все они разные.Будущее переднего конца паутины еще не определено, но внутренний взгляд уже начался.К счастью, основная секта переднего конца процветает и популярна , особенно React, Vue и Angular — это три столпа. Лидер, сегодняшняя история начинается с React Canyon.
Каждый внешний призыватель React Canyon, согласно пониманию стека технологий React и внешнего интерфейса, является бронзовым, серебряным, золотым, платиновым, алмазным, звездным и королем, а также соответствует семи модулям этой серии руководств.
- Упрямая бронза
- Начальный этап входа в каньон, призыватель по умолчанию уже имеет
ES6,nodejsОсновы - использовать
create-react-appУчреждатьReactсреда разработки - Учить
ReactОсновной геймплей в мире, такой как компонентизация,JSX, прослушиватель событий, внутреннийstate, компонентаprops, функции жизненного цикла и др. - Эта статья в основном знакомит
ReactБазовые знания, необходимые для перехода с бронзы на серебро, после прочтения вы станете серебряным.
- Начальный этап входа в каньон, призыватель по умолчанию уже имеет
- заказать серебро
- Когда вы достигаете серебряного ранга, у вас в основном есть базовые операции, и не будет ситуации, когда вы стоите под местной башней и вас убивают.
- Нам нужно купить скин, чтобы улучшить красоту страницы и больше практиковаться
- Научитесь использовать Ant Financial
ant-designиспользование
-
Слава Золото
- На этом этапе Призыватель будет
ReactС базовым пониманием, если мы хотим еще больше улучшить наш рейтинг, нам нужно улучшить наше общее представление. - научиться использовать
React-Router4Сделаем нас многогранными - научиться использовать
BrowserRouter,Router,Linkдругие компоненты - научиться использовать
ReduxСотрудничайте с товарищами по команде и культивируйте общую ситуацию - Понимать шаблоны разработки потока данных с одним элементом и
Reduxразличные понятия, такие какdispatch,action,reducers - использовать
react-reduxлучше иReduxПри осознании общей ситуации получить платину тоже очень легко
- На этом этапе Призыватель будет
-
Престиж Платинум
- Многие карты призывателя не могут перейти на платину, потому что платина хочет перейти на алмаз, вам нужно знать больше деталей и принципов.
-
ReactПринципиальный анализ - Иметь глубокое понимание принципов собственных навыков, что необходимо для бриллиантов.
-
Вечный алмаз
- Алмазный уровень запустил режим «Знамение».Умение призывателя должно быть достаточно глубоким, чтобы идти дальше, и понимание навыков, в которых он хорош, должно быть глубже.
-
ReduxМеханизм промежуточного программного обеспечения, реализация собственного промежуточного программного обеспечения - Общие методы оптимизации производительности React
- рендеринг на стороне сервера
-
ReduxВ дополнение к другим решениям для обработки данных, таким какmobx,dva
-
Высшая звезда
- Этот сегмент уже сам по себе сильный игрок.Цель ограничена React.Подойти к следующему уровню сложно.Необходимо понимание лежащих в основе принципов.
-
ReduxПринципиальный анализ + реализация собственногоRedux -
React-Router+ реализовывать своиReact-Router -
WebppackАнализ механизма и принципа работы -
BabelАнализ механизма и принципа работы
- самый сильный король
- Достижение самого сильного короля - это уже топ призыватель.Это известное существо во всем Реакт-Каньоне.Я слышал, что есть еще легендарный король славы наверху.Я не могу достичь его в своей жизни, и я не могу научить ты, 囧
- На данном этапе рекомендую только книгу "Руководство по здоровью программиста" Сохранить физическое и психическое здоровье и стать королем славы - вопрос времени.
Перед началом сделайте небольшую рекламу, приглашаю всех обратить внимание на мой практический курс по React на MOOC.comПолная разработка Redux+React Router+Node.js
Начнем наш текст, упрямый бронзовый каталог
- Строительство окружающей среды
- первый компонент
- Вложение компонентов и передача свойств
- Обработка статуса
- Жизненный цикл
Строительство окружающей среды
По умолчанию у вас уже есть среда узла, сначала установите леса
npm install create-react-app -g
Затем создайте проект и начните
create-react-app bronze
cd bronze
npm start
См. схему ниже, что означает первыйReactприложение запущено
Открываем каталог src
src
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── logo.svg
└── registerServiceWorker.js
index.jsЯвляется входным файлом, основной контент должен быть представлен отдельноReactа такжеReactDom, затем визуализирует компонентAppсуществует#rootна этом элементе
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />,document.getElementById('root'));
Затем сосредоточьтесь наApp.jsэто конкретное содержание нашего компонента
import React, { Component } from 'react'
class App extends Component {
render() {
return (
<div className="App">
<p>
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
}
export default App;
это в принципе проще всегоReactКомпоненты, и самостоятельная реализация компонентов тоже разбита на несколько шагов
import React- Создайте новый класс, наследуйте
React.Component,ReactКаждый компонент может быть записан как класс - Категория
renderВозвращаемое значение функции — это содержимое, отображаемое на странице. -
renderТо, что возвращается сюда, это что-то немного странное, якобыhtmlфактическиBabelположитJSXПревратиться вReact.createElememtвыполнить - из-за
JSXСуть в js,classявляется ключевым словом js, поэтому используйтеclassNameзаменять - Если вы хотите
JSXотображать переменные, использовать{}Просто оберните
Сейчасофициальный сайт Бабеля], посмотри наJSXСкомпилированный код, затем подчеркните ключевые моменты, так называемыеJSX, по сути это js объект, а дальше использоватьReactDom.renderметод, визуализировать в дом
// jsx
<div className="App">
<p>hello react</p>
</div>
// 转换后
React.createElement(
"div",
{ className: "App" },
React.createElement(
"p",
null,
"hello react"
)
)
первый компонент
Реализуем наш первый компонент, модифицируемApp.jsдля
import React, { Component } from 'react'
class App extends Component {
render() {
const level='最强王者'
return (
<div>
<h2>我们的目标是{level}</h2>
</div>
)
}
}
export default App
из-заJSXПо сути, это js, поэтому мы можем{}Он использует выражения js и другие функции, такие как троичные, функции, переменные и т. д., а также может отображать массивы в списки.
import React, { Component } from 'react'
class App extends Component {
render() {
const level='最强王者'
const isKing = true
const title = isKing
? <p>早睡早起,理性游戏</p>
: <h2>我们的目标是{level}</h2>
const wordList = ['俺老孙来也','有妖气','取经之路,就在脚下']
return (
<div>
{title}
{isKing ? <p>我就是王者</p>: null}
<ul>
{wordList.map(v=><li key={v}>{v}</li>)}
</ul>
</div>
)
}
}
export default App
Здесь следует уделить немного внимания, т.render, еслиreturnНесколько элементов должны быть заключены в родительский элемент, иначе будет сообщено об ошибке.
Ставим на возвратJSXскопировать в переменную,JSXтакже можно найти в{}Тернарное выражение используется внутри, и вы можете изменить егоisKingдаfalseпопробуй
Затем, чтобы отобразить список, мы используемmapФункция сопоставляется непосредственно сJSXмассив из , помните, что каждый элемент в списке имеетkeyАтрибут, о его функции мы расскажем, когда будем говорить о виртуальном доме.
Вложение компонентов и передача свойств
Если мы продолжим разработку нашего приложения, теперь создайте другоеTankкомпоненты, которые могут быть размещены непосредственно наAppиспользуется в компоненте и может передавать свойство внутри компонента, использоватьthis.props.keyПолучать
import React, { Component } from 'react'
class App extends Component {
render() {
const level='最强王者'
const isKing = true
const title = isKing
? <p>早睡早起,理性游戏</p>
: <h2>我们的目标是{level}</h2>
return (
<div>
{title}
{isKing ? <p>我就是王者</p>: null}
<Tank name='程咬金'></Tank>
</div>
)
}
}
class Tank extends Component {
render() {
return (
<div>
<h3>{this.props.name}是一个坦克</h3>
</div>
)
}
}
export default App
Если наш компонент имеет только одинrenderМетод также может быть написан как функция, а реквизиты являются параметрами функции.Мы называем этот компонент компонентом без состояния.Особенность этого компонента в том, что возврат связан только с реквизитами, а возможность повторного использования высока.
function Tank(props){
return (
<div>
<h3>{props.name}是一个坦克</h3>
</div>
)
}
Таким образом, мы можем разделить приложение на несколько компонентов, а затем склеить приложение в виде строительных блоков, но текущие компоненты не могут быть изменены.Далее мы изучим управление состоянием React, то есть состояние
Управление состоянием React и прослушивание событий
Мы инициализируем состояние в конструкторе, который на самом деле является обычным js-объектом, а затем вызываем функцию this.setState для изменения состояния.Каждый раз, когда устанавливается setState, компонент будет перерисовываться.
Вы можете использовать onClick для привязки функции в компоненте, вы можете слушать события пользователя, особо нечего сказать, посмотрите код
class App extends Component {
constructor(props){
super(props)
this.state = {
isKing:true
}
this.handleClick = this.handleClick.bind(this)
}
handleClick(){
this.setState({
isKing: !this.state.isKing
})
}
render() {
const level='最强王者'
const title = this.state.isKing
? <p>早睡早起,理性游戏</p>
: <h2>我们的目标是{level}</h2>
return (
<div>
<button onClick={this.handleClick}>点我</button>
{title}
{this.state.isKing ? <p>我就是王者</p>: null}
<Tank name='程咬金'></Tank>
</div>
)
}
}
Один из моментов, на который мы должны обратить внимание, этоconstructor, назовем его конструктором, сюда помещается состояние инициализации компонента, устанавливаемisKingдаtrue,Потомbuttonна элементеonClick, выполнятьhandleClick,существуетhandleClickВнутренний вызовthis.setStateмодифицироватьisKing
constructorв функцииbindнасильноhandleClickизthisпривязать к компоненту, иначеonClickбудет получено, когдаthisВ ссылке ошибка, есть другие формы для решения этой проблемы, писать не нужноbindэта линия
import React, { Component } from 'react'
class App extends Component {
constructor(props){
super(props)
this.state = {
isKing:true
}
this.handleClick = this.handleClick.bind(this)
}
// 在constructor里手动 bind
handleClick(){
this.setState({
isKing: !this.state.isKing
})
}
// 绑定的时候传递箭头函数
handleClick1(){
this.handleClick()
}
// 定义的时候是剪头函数
handleClick2 = ()=>{
this.handleClick()
}
// onClick 的时候直接绑定
handleClick3(){
this.handleClick()
}
render() {
const level='最强王者'
const title = this.state.isKing
? <p>早睡早起,理性游戏</p>
: <h2>我们的目标是{level}</h2>
return (
<div>
<button onClick={this.handleClick}>点我</button>
<button onClick={()=>this.handleClick1()}>点我1</button>
<button onClick={this.handleClick2}>点我2</button>
<button onClick={this.handleClick3.bind(this)}>点我3</button>
{title}
{this.state.isKing ? <p>我就是王者</p>: null}
<Tank name='程咬金'></Tank>
</div>
)
}
}
Жизненный цикл
Последнее, что нужно представить, этоReactВ жизненном цикле компонентов у каждого компонента будут разные функции-ловушки, выполняемые в разное время, например, после загрузки компонента он будет выполнен.componentDidMountфункция ловушки
class App extends Component{
componentDidMount(){
console.log('组件渲染完毕')
}
render(){
console.log('组件正在渲染')
return <h2>倔强青铜</h2>
}
}
// 组件正在渲染
// 组件渲染完毕
ReactНа разных этапах будут выполняться разные функции, я нашел в интернете картинку, на которой наглядно показаны сроки выполнения каждой функции жизненного цикла.
class App extends Component {
constructor(props){
super(props)
this.state = {
isKing:true
}
this.handleClick = this.handleClick.bind(this)
console.log('constructor App 的构造函数,初始化先执行')
}
handleClick(){
this.setState({
isKing: !this.state.isKing
})
}
componentWillMount(){
console.log('componentWillMount,组件 App 准备渲染')
}
componentDidMount(){
console.log('componentDidMount,组件 App 渲染完毕')
}
shouldComponentUpdate(){
console.log('shouldComponentUpdate,判断 App 组件是否应该渲染, 默认返回 true')
return true
}
componentWillUpdate(){
console.log('componentWillUpdate,组件 App 准备更新了')
}
componentDidUpdate(){
console.log('componentDidUpdate, 组件 App 更新完毕了')
}
render() {
const level='最强王者'
const title = this.state.isKing
? <p>早睡早起,理性游戏</p>
: <h2>我们的目标是{level}</h2>
const wordList = ['俺老孙来也','有妖气','取经之路,就在脚下']
console.log('组件 App 正在渲染')
return (
<div>
<button onClick={this.handleClick}>点我</button>
{title}
{this.state.isKing ? <p>我就是王者</p>: null}
<ul>
{wordList.map(v=><li key={v}>{v}</li>)}
</ul>
<Tank name='程咬金'></Tank>
</div>
)
}
}
// 首次加载打印
constructor App 的构造函数,初始化先执行
componentWillMount,组件 App 准备渲染
组件 App 正在渲染
componentDidMount,组件 App 渲染完毕
// 点击按钮修改状态时打印
shouldComponentUpdate,判断 App 组件是否应该渲染, 默认返回 true
componentWillUpdate,组件 App 准备更新了
组件 App 正在渲染
componentDidUpdate, 组件 App 更新完毕了
Помимо вышеперечисленных, существуют также
-
React16добавленcomponentDidCatchЖизненный цикл, используемый для обработки ошибок -
shouldComponentUpdateвернутьfalse, то компонент не будет отображаться - Если это подкомпонент, существует также
componentWillReceiveProps - Удаление компонента имеет
componentWillUnmount, используется для очистки ресурсов - Разумно используйте жизненный цикл, чтобы делать разные вещи на разных этапах
Если вы можете видеть здесь, это действительно правдаReactЭто настоящая любовь, поздравляю, у тебя уже серебро в порядке, получай значок
Приглашаю всех обратить внимание на мои практические курсы на MOOC.comПолная разработка Redux+React Router+Node.js
Следующее уведомление: Заказать серебряную главу -- использоватьant-designБиблиотека пользовательского интерфейса, если у вас есть какие-либо вопросы, оставьте сообщение, мы также можем открыть черный и пойти к королю вместе.