首页 > 其他分享 >React初次使用

React初次使用

时间:2024-04-18 20:55:21浏览次数:13  
标签:function return name App React 初次 使用 const id

大概过了一下JS,今天再试试React

一、React核心语法

1、脚手架创建一个项目

npx create-react-app demo

2、插值

function App() {
  const divContent = '标签内容'
  const divTitle = '标签标题'

  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
      </header>

      <div title={divTitle}>
        {divContent}
      </div>
    </div>
  );
}
function App() {
  const list = ['小王','小李','小翠']
  const listContent = list.map(item => (
    <li>{item}</li>
  ))

  return (
    <div className="App">
      <header className="App-header">
      </header>
    <div>
        <ul>{listContent}</ul>
    </div>
  );
}

function App() {
  const list = [
    {id: 1, name: '小李'},
    {id: 2, name: '小王'},
    {id: 3, name: '小翠'}
  ]
  const listContent = list.map(item => (
    <li key={item.id}>{item.name}</li>
  ))

  return (
    <div className="App">
      <header className="App-header">
      </header>
    <div>
        <ul>{listContent}</ul>
    </div>
  );
}

事件按钮

function App() {

  // const list = [
  //   {id: 1, name: '小李'},
  //   {id: 2, name: '小王'},
  //   {id: 3, name: '小翠'}
  // ]
  
  function handleClick(){
    alert("点击")
  }


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

export default App;

状态

直接修改是不生效的

function App() {

  // const list = [
  //   {id: 1, name: '小李'},
  //   {id: 2, name: '小王'},
  //   {id: 3, name: '小翠'}
  // ]
  
  let divContent = "默认内容"

  function handleClick(){
    divContent = "新内容"
  }


  return (
    <div className="App">
      <span>{divContent}</span>
      <button onClick={handleClick}>按钮</button>
    </div>
  );
}

export default App;

需要使用useState状态变更

import { useState } from 'react'

function App() {
  
  //let divContent = "默认内容"
  const [content, setContent] = useState('默认内容')

  function handleClick(){
    setContent("新内容")
  }

  return (
    <div className="App">
      <span>{content}</span>
      <button onClick={handleClick}>按钮</button>
    </div>
  );
}

export default App;
import { useState } from 'react'

function App() {
  const [data, setData] = useState({
    title: '默认标题',
    content: '默认内容'
  })

  function handleClick(){
    //setContent("新内容")
    setData({
      ...data,
      content: "新内容"
    })
  }

  return (
    <div className="App">
      <span title={data.title}>{data.content}</span>
      <button onClick={handleClick}>按钮</button>
    </div>
  );
}

export default App;

数组形式的状态

import { useState } from 'react'

function App() {
  const [data, setData] = useState([
    {id: 1, name: '小李'},
    {id: 2, name: '小王'},
    {id: 3, name: '小翠'}
  ])

  const listData = data.map(item => (
    <li key={data.id}>{item.name}</li>
  ))

  let id = 3
  function handleClick(){
    //setContent("新内容")
    setData([
      ...data,
      {id: id++, name: "小猫"}
    ])
  }

  return (
    <div className="App">
      <ul>{listData}</ul>
      <button onClick={handleClick}>按钮</button>
    </div>
  );
}

export default App;

二、React组件通讯、插槽、Context Hook
react DOM 进行Props设置

function App() {

  const imgData = {
    className: "small",
    style: {
      width: 200,
      height: 200,
      background: 'grey'
    }
  }

  return (
    <div className="App">
      <img 
        src={logo} 
        alt=""
        {...imgData}
      />
    </div>
  );
}

export default App;

函数组件

function Article({title, content, active}){
  return (
    <div>
      <h1>{title}</h1>
      <p>{content}</p>
      <p>状态:{active ? '显示中':'隐藏中'}</p>
    </div>
  )
}


function App() {
  return (
    <div className="App">
      <Article
        title="标签1"
        content="内容1"
        active
      />
      <Article
        title="标签2"
        content="内容2"
      />
      <Article
        title="标签3"
        content="内容3"
      />
    </div>
  );
}

export default App;

优化从夫组件到子组件传值

function Article({title, detailData}){
  return (
    <div>
      <h1>{title}</h1>
      <Detail {...detailData}/>
    </div>
  )
}

function Detail({content,active}){
  return (
    <>
      <p>{content}</p>
      <p>状态:{active ? '显示中':'隐藏中'}</p>
    </>
  )
}

function App() {

  const getArtData = {
    title: '标签1',
    detailData:{
      content: '内容1',
      active: true
    }
  }

  return (
    <div className="App">
      <Article
      {...getArtData}
      />
    </div>
  );
}

export default App;

将JSX作为Props传递(组件插槽)

function List({ children }){
  return (
    <ul>
      {children}
    </ul>
  )
}

function App() {
  return (
    <div className="App">
      <List>
        <li>列表1</li>
        <li>列表1</li>
      </List>
    </div>
  );
}

export default App;

子组件向父组件传递

function Detail({onActive}){
  const [status, setStatus] = useState(false)

  function handleClick(){
    setStatus(!false)
    onActive(status)
  }

  return (
    <div>
      <p style={{
        display: status ? 'block':'none'
      }}>Detail内容</p>
      <button onClick={handleClick}>按钮</button>
    </div>
  )
}

function App() {
  function handleActive({status}){
    alert(status)
  }
  return (
    <div className="App">
      <Detail
        onActive={handleActive}
      />
    </div>
  );
}

export default App;

标签:function,return,name,App,React,初次,使用,const,id
From: https://www.cnblogs.com/shwang/p/18143948

相关文章

  • HarmonyOS NEXT应用开发之使用AKI轻松实现跨语言调用
    介绍针对JS与C/C++跨语言访问场景,NAPI使用比较繁琐。而AKI提供了极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调,使用方便。本示例将介绍使用AKI编写C++跨线程调用JS函数场景。通过调用C++全局函数,创建子线程来调用JS函数,实现对变量value的加10操作,为开发者使用AKI提......
  • Mac 使用 brew 安装 mysql
    ##搜索可用版本brewsearchmysql##安装制定版本[email protected]##重点需要关注的安装日志如下==>[email protected]==>[email protected]_1.sonoma.bottle.tar.gz==>/usr/local/Cellar/[email protected]/8.0.36_1/bin/mysqld--initialize-insecure-......
  • 在 SQL Server 中 你可以使用以下查询来找到引用 的 FOREIGN KEY 约束
    SELECTf.nameASForeignKeyName,OBJECT_NAME(f.parent_object_id)ASReferencingTable,COL_NAME(fc.parent_object_id,fc.parent_column_id)ASReferencingColumn,OBJECT_NAME(f.referenced_object_id)ASReferencedTable,COL_NAME(fc.referenced_object_id,fc.re......
  • stm32f103使用RT-Thread组件fal读写内部flash
    本次使用RT-Threadstudio编写,使用为5.02完整版,目的是将内部flash进行分区,可以直接在内部flash存储数据。一、功能配置首先是打开设置里的FAL组件,因为我这里不需要外部内存,SFUD驱动就没打开:然后是配置两个参数,一个在board.h里,定义BSP_USING_ON_CHIP_FLASH,一个是在stm32xxxx_hal_......
  • 使用c#8语法
    [C#]framework修改项目语言为C#8.0_.netframework项目如何修改c#语言-CSDN博客在项目文件中增加一条:<PropertyGroupCondition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"><PlatformTarget>AnyCPU</PlatformTarget><DebugSy......
  • 什么是云渲染?云渲染平台怎么使用?云渲染怎么收费?
    什么是云渲染?云渲染是一种利用云计算技术提供的云端服务,用户可以将本地任务递交到远程服务器上,由远程计算集群协调和完成渲染,并将结果返回本地,最后用户可以在本地下载渲染结果。而实时云渲染则是云渲染的一种形式,它既保证了渲染质量,还可以实现实时渲染,使用户能够实时观察渲染效......
  • 使用ffmpeg 插入片头片尾(指定时长)
    功能需求:1、插入的片头可以时图片或视频。图片格式暂时未jpg视频格式为mp4。可能存在的问题:1)、图片需要先转换成ts文件:增加视频和音频。2)、mp4文件可能无声音。3)、片头片尾的参数与录制视频的参数不匹配:导致连接过程可能会黑屏。  首先参数统一1、如何加快编码h264......
  • Snipaste使用教程
    下载官网下载地址-中文​ 根据自己的操作系统选择需要下载的zip文件​ 比如我就要下载64位Windows版本安装将该zip文件解压运行执行程序发送到桌面或添加到任务栏使用运行​ 双击.exe执行程序就可以啦默认F1截屏左键点击Snipa......
  • 使用 Dockerfile 定制镜像【转】
    前言大家好,本文是对Docker自定义镜像的详细讲解,讲解了如何进行构建自己的Docker镜像以及Dockerfile的操作指令。希望对大家有所帮助~一、使用Dockerfile定制镜像1.1、Dockerfile定制镜像镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改......
  • PCL2的安装及使用
    环境准备账号【不是一定要有正版账号,没有正版可以玩离线】Java环境如果是一来就使用PCL2的玩家,一定要确保电脑上有Java环境。如何确定自己电脑上有没有Java环境?我也不知道,只能问问你的记忆了awa如果安装Java环境的时候进行了环境变量配置,那么在命令行输入java-ve......