React学习D1

29 阅读3分钟

1.课程安排

image.png

2.React 介绍

image.png

3. 搭建React开发环境

使用cra,底层有webpack构建 image.png

3.1 在项目命令行搭建开发环境

image.png 搭建成功:

image.png

3.2 快速跑起项目

image.png

image.png 成功启动! image.png

3.3 项目结构

只保留两个js文件 image.png

3.4 JSX介绍

image.png

3.4.1 JSX的本质(babel解析,开发者只要遵循JSX语法,就可以高效率开发)

注意:浏览器不能直接识别JSX,是babel自动解析成浏览器能识别的语法 Babel image.png

3.4.2 JSX使用(以下介绍高频场景)

image.png

const count=100
function getName(){return '张三'}
function App() {
  return (
    <div className="App">
     this is app
     {/* 1. 使用引号耗材你弟字符串 */}
     {'你好 '}
     {/* 2. 使用JavaScript变量 */}
      {count}
      {/* 函数调用 */}
      {getName()}
      {/* 3. 方法调用 */}
      {new Date().getTime()}
      {/* 4. 使用JavaScript对象 这里举例使用内联样式*/}
      <div style={{color:'red'}}>this is div</div>
    </div>
  );
}

export default App;

结果:

image.png

3.4.3 JSX实现列表渲染

重点:遍历需要绑定唯一个key值 拓展;key是react框架内部使用 提升更新性能 image.png

// 定义list
const list=[
  {id:1,name:'张三'},
  {id:2,name:'李四'},
  {id:3,name:'王五'},
]
function App() {
  return (
    <div className="App">
     <ul>
      {/* 注意:使用map需要绑定唯一的key值 */}
      {list.map(item=><li key={item.id}>{item.name}{item.id}</li>)}
     </ul>
    </div>
  );
}

export default App;

image.png

3.4.4 JSX实现条件渲染

与运算:两者为真则为真,则显示,即连接符后的为ture则显示 image.png

const isLogin = true;
function App() {
  return (
    <div className="App">
   {/*  1. 逻辑与运算 */}
   {isLogin && <h1>欢迎来到首页</h1>}
   
   {/* 三元运算 */}
   {isLogin ? <h1>为真</h1> : <h1>请先登录</h1>}
    </div>
  );
}

export default App;

结果:

image.png

3.4.5 JSX中实现复杂条件渲染

如下图:无图、双图、多图

image.png

const aType=1
// 定义核心函数(根据文章类型返回不同的JSX模板)
function getaType(){
  if(aType===1){
    return <h1>我是无图文章</h1>
  }else if(aType===2){
    return <h1>我是单图文章</h1>
  }else if(aType===3){
    return <h1>我是多图文章</h1>
  }
}
function App() {
  return (
    <div className="App">
 {/* 通过调用函数渲染不同的模板 */}
 {getaType()}
    </div>
  );
}

export default App;

结果:(const aType=1(当aType=1时渲染无图))

image.png

3.5 React学习

3.5.1 React基础事件绑定

image.png

3.5.1.1 简单尝试绑定button事件

function App() {
  const handelClick = () => {
    console.log('按钮被点击了');
  };
  return (
    <div className="App">
      <button onClick={handelClick}>click me</button>
    </div>
  );
}

export default App;

结果:

image.png

3.5.1.2 获取事件参数

function App() {
  const handelClick = (e) => {
    console.log('按钮被点击了',e);
  };
  return (
    <div className="App">
      <button onClick={handelClick}>click me</button>
    </div>
  );
}

export default App;

image.png

3.5.1.3 获取自定义参数(要用到箭头函数的引用写法)

常用于做删除和编辑


function App() {
  const handelClick = (e) => {
    console.log('按钮被点击了',e);
  };
    const buttonClick = (name) => {
    console.log('获取自定义事件',name);
  };
  return (
    <div className="App">
      <button onClick={handelClick}>点我获取参数</button>
      <button onClick={() => buttonClick('自定义函数被获取了')}>自定义事件</button>
    </div>
  );


  
}

export default App;

image.png

3.5.1.4 同时要事件对象和自定义参数

function App() {

    const complexClick = (name,e) => {
    console.log('获取自定义事件',name,e);
  };
  return (
    <div className="App">
      <button onClick={(e) => complexClick('自定义函数被获取了',e)}>自定义事件</button>
    </div>
  );  
}

export default App;

image.png

3.5.2 React中的组件

image.png

// 1.定义组件(也可以通过箭头函数得方式定义组件)
function Button(){
  // 组件逻辑
  return (
    <button>
      我是按钮
    </button>
  )
}
function App() {
  return (
    <div className="App">
      {/* 使用组件 */}
      <Button />
      <Button></Button>
    </div>
  );
}

()
export default App;

结果:

image.png

3.6 useState(用于定义响应式变量=>数据驱动视图)

image.png

3.6.1 useState基础用法

// 使用useState实现计数器案例:点击自增
import React, { useState } from 'react';
function App() {
  // 1.调用useState 添加一个状态变量
// useState(0) 是 React 的 Hook,它返回一个包含两个元素的数组:

// - 第一个元素:当前的状态值(这里是 0 )
// - 第二个元素:更新状态的函数
// 使用解构赋值
  const[count,setCount] = useState(0);
  // 2.点击事件回调
  const handleClick=()=>{
    // 1、使用传入的新值修改count
    // 2、重新使用新的count渲染UI
    setCount(count+1);
    console.log(count);
  }

  return (
    <div className="App">
      <button onClick={handleClick}>{count}</button>
    </div>
  );


  
}

export default App;

结果:

image.png

3.6.2 useState使用规则

3.6.2.1 状态不可变

image.png

3.6.2.2 修改对象状态

使用展开运算符再进行覆盖 image.png

// 使用useState实现计数器案例:点击自增
import React, { useState } from 'react';
function App() {
  const [user,setUser] = useState({name:'张三'});
  const changeForm=()=>{
  setUser({
      ...user,
    name:'李四'
  })
  console.log(user)
  }
  return (
    <div className="App">
      <button onClick={changeForm}>{user.name}</button>
    </div>
  );
}

export default App;

注意:setUser 不会立即更新 user ,React 会 批量处理 状态更新,然后在 下一次渲染 时才使用新值!,所以第一次会先consle出张三,后面才会更新出李四 image.png

3.7 组件基础样式方案

image.png

4 评论案例

image.png

image.png