10分でReactの基礎をすばやく理解
6030 ワード
ブログ
9102年ですが、まだReactができない場合は、この文書でReactを迅速に理解してほしいです.jsの基礎知識.
プロジェクトの作成
create-react-appツールを使用して、React SPAをすばやく作成します.
プロジェクトの初期構造:
Hello React
最終的にこのルートコンポーネントは、ページにHello Reactのh 1タイトルが表示されます.
JSX
前例でルートコンポーネントを書く場合、render関数ではJSXに言及していますが、簡単に見るとjsにhtmlを書くことができ、
JSXでは以下の点に注意してください. classはclassNameに置き換えられ、forはhtmlForに置き換えられます. コンポーネントには、最外層のルート要素が包まれていなければならない.ルート要素が欲しくなければ
ToDoListアプリケーションを書く
書く前にToDoListのニーズを明確にします.入力ボックス入力すること; 追加ボタン追加入力ボックスのイベントをリストに追加する. 現在追加されているイベントを示すリスト. リストのイベントをクリックして完了を示すと、対応するイベントが削除される.
Todoコンポーネント
まずTodoという名前のコンポーネントを書き、Appルートコンポーネントで呼び出せばいいです.
App.jsでTodoコンポーネントを呼び出します.
カスタムコンポーネントを呼び出すときは、オリジナルhtmlコンポーネントのように
reactおよびreactは依然として導入する.コンポーネントを作成し、classを使用してコンポーネントを作成します.constructorではsuperによって親コンポーネントからのデータを継承し、stateによってコンポーネント内部のデータを定義します.render関数では{}でjsを使用してhtmlにデータとイベントを動的にバインドし、バインドされたイベントもclassで定義し、bindでthis指向を変更する必要があります.
ここでrefを使用して入力ボックスノードを
ulでjsのmapメソッドを直接使用して
TodoItemコンポーネント
サブコンポーネントがpropsを介して親コンポーネントから直接渡されるデータには、メソッドが含まれます.サブコンポーネントは、親コンポーネントから送信されたデータを直接変更することはできません.そのため、親コンポーネントを呼び出す方法を変更する必要があります.たとえば、ここでクリックして削除すると、親コンポーネントを呼び出すdelItemメソッドになります.
ここでは、
今、この需要は基本的に完成しました.
ライフサイクル
reactの各コンポーネントにはライフサイクル関数があり、コンポーネントがレンダリングを開始し、破棄に更新されるたびに、対応するライフサイクル関数が実行されます.
ライフサイクル関数スペクトル
上のリンクでは、vueのmountedに似た最も一般的なcomponentDidMountの実行順序が表示されます.ここでは、コンポーネントの更新前にブロックでき、
前述のToDoListプログラムでは、サブコンポーネントのrender関数にconsoleを1つ追加する.logでは、入力ボックスの値が変化するたびにすべてのコンポーネントのレンダリングがトリガーされることがわかります.したがって、shouldComponentUpdateを使用してブロックできます.
TodoItemコンポーネントに追加:
contentが更新された場合にのみ次のrender関数が実行されることを示します.
まとめ
これまでreactについて基本的な理解がありました.
9102年ですが、まだReactができない場合は、この文書でReactを迅速に理解してほしいです.jsの基礎知識.
プロジェクトの作成
create-react-appツールを使用して、React SPAをすばやく作成します.
#
yarn create react-app my-app
cd my-app
#
yarn start
プロジェクトの初期構造:
my-app/
README.md
node_modules/
package.json
public/ #
index.html #
favicon.ico #
mainifest.json #
src/ #
App.css
App.js
App.test.js
index.css
index.js #
logo.svg
Hello React
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
// id root dom
ReactDOM.render(, document.getElementById('root'));
// src/app.js
import React, { Component } from 'react';
//
class App extends Component {
constructor(props) {
super(props);
this.state = {
msg: 'Hello React'
}
}
render() {
// JSX
return (
{ this.state.msg }
);
}
}
export default App;
最終的にこのルートコンポーネントは、ページにHello Reactのh 1タイトルが表示されます.
JSX
前例でルートコンポーネントを書く場合、render関数ではJSXに言及していますが、簡単に見るとjsにhtmlを書くことができ、
React.createElement
でDomを作成することを簡略化し、BabelはJSXを翻訳します.JSXでは以下の点に注意してください.
<>
はhtml解析{}
としてjs解析とする.
を使用することができ、import { Fragment } from 'react'
を導入する必要がある.ToDoListアプリケーションを書く
書く前にToDoListのニーズを明確にします.
Todoコンポーネント
まずTodoという名前のコンポーネントを書き、Appルートコンポーネントで呼び出せばいいです.
App.jsでTodoコンポーネントを呼び出します.
import React, { Component } from 'react';
import Todo from './Todo'
class App extends Component {
render() {
return (
);
}
}
export default App;
カスタムコンポーネントを呼び出すときは、オリジナルhtmlコンポーネントのように
<>
を直接使用します.カスタムコンポーネントは大文字で始まる必要があります.// Todo.js
import React, { Component, Fragment } from 'react';
import TodoItem from './TodoItem';
class Todo extends Component {
constructor(props) {
super(props);
this.state = {
inputVal: ' ',
list: [' ', ' ']
};
this.inputChange = this.inputChange.bind(this);
this.addItem = this.addItem.bind(this);
this.delItem = this.delItem.bind(this);
}
render() {
return (
this.iptRef = iptRef}
value={this.state.inputVal}
onChange={this.inputChange}
/>
{
this.state.list.map((item, idx) => {
return (
)
})
}
);
}
inputChange() {
this.setState({
inputVal: this.iptRef.value
})
}
addItem() {
this.setState({
list: [...this.state.list, this.state.inputVal]
})
}
delItem(idx) {
const list = this.state.list;
list.splice(idx, 1);
this.setState({
list
})
}
}
export default Todo;
reactおよびreactは依然として導入する.コンポーネントを作成し、classを使用してコンポーネントを作成します.constructorではsuperによって親コンポーネントからのデータを継承し、stateによってコンポーネント内部のデータを定義します.render関数では{}でjsを使用してhtmlにデータとイベントを動的にバインドし、バインドされたイベントもclassで定義し、bindでthis指向を変更する必要があります.
ここでrefを使用して入力ボックスノードを
this.iptRef
に取得して保存し、onchangeイベントでバインドされたデータinputValを変更する.ビューの更新を開始するには、setStateメソッドを呼び出す必要があります.ulでjsのmapメソッドを直接使用して
state.list
を巡回して展示リストを生成し、リストの各項目を新しいサブコンポーネントTodoItemとして抽出し、サブコンポーネントに必要なデータidx、content、およびメソッドdelItemを彼に渡す.注意が必要な場合は、生成されたコンポーネントを巡回してkeyプロパティを追加しないと警告されます.TodoItemコンポーネント
import React, { Component } from 'react';
import PropTypes from 'prop-types';
class TodoItem extends Component {
constructor(props) {
super(props);
this.state = {};
this.handleItemClick = this.handleItemClick.bind(this);
}
render() {
return (
{`${this.props.idx + 1}. ${this.props.content}`}
);
}
handleItemClick() {
this.props.delItem && this.props.delItem(this.props.idx);
}
}
TodoItem.propTypes = {
idx: PropTypes.number.isRequired,
content: PropTypes.string.isRequired,
delItem: PropTypes.func
}
export default TodoItem;
サブコンポーネントがpropsを介して親コンポーネントから直接渡されるデータには、メソッドが含まれます.サブコンポーネントは、親コンポーネントから送信されたデータを直接変更することはできません.そのため、親コンポーネントを呼び出す方法を変更する必要があります.たとえば、ここでクリックして削除すると、親コンポーネントを呼び出すdelItemメソッドになります.
ここでは、
prop-types
を導入して、サブコンポーネントがデータを送信するタイプチェックを支援し、isRequiredを追加して、データが送信されなければならないことを示すこともでき、この制限に従ってサブコンポーネントデータに送信されなければ、エラーメッセージが表示されます.今、この需要は基本的に完成しました.
ライフサイクル
reactの各コンポーネントにはライフサイクル関数があり、コンポーネントがレンダリングを開始し、破棄に更新されるたびに、対応するライフサイクル関数が実行されます.
ライフサイクル関数スペクトル
上のリンクでは、vueのmountedに似た最も一般的なcomponentDidMountの実行順序が表示されます.ここでは、コンポーネントの更新前にブロックでき、
return true
でrender関数が実行されるshouldComponentUpdateが特殊です.前述のToDoListプログラムでは、サブコンポーネントのrender関数にconsoleを1つ追加する.logでは、入力ボックスの値が変化するたびにすべてのコンポーネントのレンダリングがトリガーされることがわかります.したがって、shouldComponentUpdateを使用してブロックできます.
TodoItemコンポーネントに追加:
shouldComponentUpdate(nextProps, nextState) {nextProps, nextState);
return nextProps.content !== this.props.content;
}
contentが更新された場合にのみ次のrender関数が実行されることを示します.
まとめ
これまでreactについて基本的な理解がありました.