跳转至

12.React.js基础

react 是最流行的前端框架之一。

npm i react

初始化

初始化react项目

npx create-react-app test2

运行

npm  start

尝试修改内容,观察变化

image-20240104115535205

组件

import logo from './logo.svg';
import './App.css';
// 组件定义
function WelcomeMsg(){
  return <h1>Welcome to Web3!</h1>
}
function App() {
  const message="Hello, World";
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        {/* 组件使用 */}
        <WelcomeMsg/>
      </header>
    </div>
  );
}

export default App;

组件一般是单独管理在目录下

JSX

很像html但不是,它可以用js里面内内容

状态管理

任何组件都有自己的状态,也可以去改变自己的状态。

需要用useState

import logo from './logo.svg';
import './App.css';
import { useState } from 'react';

function Counter(){
  // useState中的0代表count初始状态0,setCount改变状态
  const[count,setCount]=useState(0);
  return(
    <div>
      <p>You clicked {count} times</p>
      <button onClick={()=>setCount(count+1)}>Click me!</button>
    </div>
  )
}
function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        {/* 组件使用 */}
        <Counter/>
      </header>
    </div>
  );
}

export default App;

image-20240104120227086

传递属性

import { useState } from 'react';
function Counter({name}){
  // useState中的0代表count初始状态0,setCount改变状态
  const[count,setCount]=useState(0);
  return(
    <div>
      <p>{name} clicked {count} times</p>
      <button onClick={()=>setCount(count+1)}>Click me!</button>
    </div>
  )
}


 {/* 组件使用 */}
<Counter name="soni"/>

页面初始化的数值处理

useEffect

页面加载前渲染数据

import { useState,useEffect } from 'react';

function Counter({name}){
  // useState中的0代表count初始状态0,setCount改变状态
  const[count,setCount]=useState(0);

  useEffect(()=>{
    console.log(`${name} clicked ${count} times. `);
  });
  // 只监听name变化
  // useEffect(()=>{
  //   console.log(`${name} clicked ${count} times. `);
  // },[name]);


  return(
    <div>
      <p>{name} clicked {count} times</p>
      <button onClick={()=>setCount(count+1)}>Click me!</button>
    </div>
  )
}

完整代码

import logo from './logo.svg';
import './App.css';
import { useState,useEffect } from 'react';

function Counter({name}){
  // useState中的0代表count初始状态0,setCount改变状态
  const[count,setCount]=useState(0);

  useEffect(()=>{
    console.log(`${name} clicked ${count} times. `);
  });
  // 只监听name变化
  // useEffect(()=>{
  //   console.log(`${name} clicked ${count} times. `);
  // },[name]);


  return(
    <div>
      <p>{name} clicked {count} times</p>
      <button onClick={()=>setCount(count+1)}>Click me!</button>
    </div>
  )
}
function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        {/* 组件使用 */}
        <Counter name="soni"/>
      </header>
    </div>
  );
}

export default App;