Интерфейсный континент — это новый развивающийся сектор в мире технологий в последние годы.По мере того, как люди взаимодействуют с веб-сайтами и улучшают их производительность, количество призывателей, которые отправляются на внешний континент, чтобы попрактиковаться в 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 React. Я слышал, что есть также легендарный король славы выше. Я не могу добраться до него в моей жизни, и я не могу научить Вы, 囧.
- На данном этапе рекомендую только книгу "Руководство по здоровью программиста" Сохранить физическое и психическое здоровье и стать королем славы - вопрос времени.
Начнем наш текст, упрямый бронзовый каталог
- Строительство окружающей среды
- первый компонент
- Вложение компонентов и передача свойств
- Обработка статуса
- Жизненный цикл
Строительство окружающей среды
По умолчанию у вас уже есть среда узла, сначала установите леса
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
отображать переменные, использовать{}
Просто оберните
Теперь [официальный сайт Babel]](babeljs.io/repl/), видетьJSX
Скомпилированный код, затем подчеркните ключевые моменты, так называемыеJSX
, по сути это js объект, а дальше использоватьReactDom.render
Метод, рендеринг в DOM
// 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
Это настоящая любовь, поздравляю, у тебя уже серебро в порядке, получай значок
Сегодняшний код готовgithub
Следующее уведомление: Заказать серебряную главу -- использоватьant-designБиблиотека пользовательского интерфейса, если у вас есть какие-либо вопросы, оставьте сообщение, мы также можем открыть черный и пойти к королю вместе.