引言
React作為以後最風行的前端JavaScript庫之一,以其高效、組件化跟申明式的特點,深受開辟者愛好。本文將帶你從React入門到實戰,深刻懂得React利用的高效構建全流程。
一、React入門
1.1 React簡介
React是由Facebook開辟的一個用於構建用戶界面的JavaScript庫。它採用組件化頭腦,將UI拆分為獨破的、可復用的部分,使得代碼愈加模塊化跟可保護。
1.2 React核心不雅點
- JSX:JavaScript XML,一品種似HTML的語法擴大年夜,容許在JavaScript代碼中寫HTML構造。
- 組件:React的基本構建塊,可能包含本人的狀況跟邏輯。
- 虛擬DOM:React利用虛擬DOM來高效地更新UI。
二、React情況搭建
2.1 安裝Node.js與npm
起首,確保你的電腦上安裝了Node.js跟npm。可能從Node.js官網下載並安裝LTS版本。
2.2 利用Create React App創建項目
利用以下命令創建一個新項目:
npx create-react-app my-react-app
cd my-react-app
npm start
這將啟動一個開辟伺服器,並在瀏覽器中打開項目。
三、React核心組件
3.1 根組件
根組件是React利用的進口點,平日命名為App
。
import React from 'react';
function App() {
return (
<div>
<h1>Hello, React!</h1>
</div>
);
}
export default App;
3.2 組件化
組件是React的核心不雅點之一。你可能創建自定義組件,並經由過程props跟state來管理數據流跟狀況。
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
export default Counter;
四、React狀況管理
React供給了多少種狀況管理方法,如useState、useReducer跟Context API。
4.1 useState
useState是一個用於狀況管理的Hook,容許你在函數組件中增加狀況。
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
export default Counter;
4.2 useReducer
useReducer是一個用於狀況管理的Hook,實用於更複雜的狀況邏輯。
import React, { useReducer } from 'react';
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
default:
throw new Error();
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
<p>You clicked {state.count} times</p>
<button onClick={() => dispatch({ type: 'increment' })}>
Increment
</button>
<button onClick={() => dispatch({ type: 'decrement' })}>
Decrement
</button>
</div>
);
}
export default Counter;
4.3 Context API
Context API容許你跨組件轉達數據,而不須要經由過程層層轉達props。
import React, { createContext, useContext } from 'react';
const CountContext = createContext();
function CountProvider({ children }) {
const [count, setCount] = useState(0);
return (
<CountContext.Provider value={{ count, setCount }}>
{children}
</CountContext.Provider>
);
}
function Counter() {
const { count, setCount } = useContext(CountContext);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
function App() {
return (
<CountProvider>
<Counter />
</CountProvider>
);
}
export default App;
五、React路由管理
React Router是一個用於處理React利用路由的庫。
import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
function App() {
return (
<Router>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/about" component={About} />
</Switch>
</Router>
);
}
function Home() {
return <h1>Home</h1>;
}
function About() {
return <h1>About</h1>;
}
export default App;
六、React機能優化
React供給了多種機能優化方法,如shouldComponentUpdate、React.memo跟useMemo等。
6.1 shouldComponentUpdate
shouldComponentUpdate是一個生命周期方法,用於斷定組件能否須要重新襯著。
class Counter extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
return this.props.count !== nextProps.count || this.state.count !== nextState.count;
}
render() {
return <div>{this.props.count}</div>;
}
}
6.2 React.memo
React.memo是一個高階組件,用於避免不須要的襯著。
const Counter = React.memo(({ count }) => {
return <div>{count}</div>;
});
6.3 useMemo
useMemo是一個用於緩存打算成果的Hook。
import React, { useMemo } from 'react';
function Counter() {
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
return <div>{memoizedValue}</div>;
}
七、實戰案例
以下是一個簡單的React TodoList利用:
import React, { useState } from 'react';
function TodoList() {
const [todos, setTodos] = useState([]);
const addTodo = (text) => {
setTodos([...todos, { id: todos.length, text }]);
};
const removeTodo = (id) => {
setTodos(todos.filter((todo) => todo.id !== id));
};
return (
<div>
<ul>
{todos.map((todo) => (
<li key={todo.id}>
{todo.text}
<button onClick={() => removeTodo(todo.id)}>Remove</button>
</li>
))}
</ul>
<input type="text" onChange={(e) => setTodoText(e.target.value)} />
<button onClick={addTodo}>Add Todo</button>
</div>
);
}
export default TodoList;
八、總結
本文從React入門到實戰技能,單方面介紹了React利用的高效構建全流程。經由過程進修本文,你將可能控制React的核心不雅點、組件化、狀況管理、路由管理、機能優化以及實戰案例等知識。盼望本文能幫助你更好地控制React開辟。