使用 npm 安装 React:
npm install react react-dom
使用 Create React App 快速创建 React 项目:
npx create-react-app my-app
cd my-app
npm start
创建一个简单的 React 组件
import React from 'react';
import ReactDOM from 'react-dom';
function HelloWorld() {
return <h1>Hello, world!</h1>;
}
ReactDOM.render(<HelloWorld />, document.getElementById('root'));
状态管理
使用 useState 钩子管理组件状态:
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
export default Counter;
生命周期方法
使用 useEffect 钩子处理组件生命周期:
import React, { useEffect } from 'react';
function DataFetcher() {
useEffect(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data));
}, []);
return <div>Fetching data...</div>;
}
export default DataFetcher;
React.createElement(type, [props], [...children]):创建并返回一个新的 React 元素。
const element = React.createElement('div', { className: 'container' }, 'Hello, world!');
React.Component:用于定义类组件的基类。
class MyComponent extends React.Component {
render() {
return <div>Hello, world!</div>;
}
}
ReactDOM.render(element, container[, callback]):将 React 元素渲染到指定的 DOM 容器中。
ReactDOM.render(<App />, document.getElementById('root'));
useState(initialState):定义和管理组件的状态钩子。
const [count, setCount] = useState(0);
useEffect(callback, [dependencies]):处理副作用的钩子,类似于生命周期方法。
useEffect(() => {
// 执行副作用
}, []);
useContext(Context):接收一个 context 对象,并返回当前 context 值。
const value = useContext(MyContext);
useReducer(reducer, initialState):用于状态管理的钩子,适用于复杂的状态逻辑。
const [state, dispatch] = useReducer(reducer, initialState);
useMemo(callback, [dependencies]):返回一个 memoized 值,仅在依赖项变化时重新计算。
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
useCallback(callback, [dependencies]):返回一个 memoized 回调函数,仅在依赖项变化时重新创建。
const memoizedCallback = useCallback(() => {
doSomething(a, b);
}, [a, b]);
Context API 使用 Context API 在组件树中传递数据,而无需逐层传递 props:
const MyContext = React.createContext();
function App() {
const value = { name: 'React' };
return (
<MyContext.Provider value={value}>
<ChildComponent />
</MyContext.Provider>
);
}
function ChildComponent() {
const context = useContext(MyContext);
return <div>{context.name}</div>;
}
自定义钩子 创建自定义钩子以复用逻辑:
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch(url)
.then(response => response.json())
.then(data => {
setData(data);
setLoading(false);
});
}, [url]);
return { data, loading };
}
function App() {
const { data, loading } = useFetch('https://api.example.com/data');
if (loading) return <div>Loading...</div>;
return <div>{JSON.stringify(data)}</div>;
}
使用 React Router 进行路由管理
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';
function Home() {
return <h2>Home</h2>;
}
function About() {
return <h2>About</h2>;
}
function App() {
return (
<Router>
<nav>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
</ul>
</nav>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/about" component={About} />
</Switch>
</Router>
);
}
export default App;