[React]初步了解State | UseState的工作原理

本文介绍了如何使用create-react-app和Vite创建React项目,包括组件的创建、嵌套、JSX语法、添加样式、数据绑定、条件渲染、列表渲染以及响应式编程(状态管理和事件处理)的基础知识。
摘要由CSDN通过智能技术生成

React安装

使用create-react-app

npm i -g create-react-app
#全局安装create-react-app
​
...
#进入创建项目的目录,略
​
create-react-app YOUR_PROJECT
#创建名为“YOUR_PROJECT”的项目

使用Vite创建react脚手架

#Vite 需要 Node.js 版本 18+,20+。
​
npm create vite@latest
? Project name: » vite-project
#项目名称
? Select a framework: » - Use arrow-keys. Return to submit.
    ...
    Vue
>   React
    Preact
    ...
#选择框架
? Select a variant: » - Use arrow-keys. Return to submit.
>   TypeScript
    TypeScript + SWC
    JavaScript
    JavaScript + SWC
#选择需要的配置,SWC是将ES6语法转换为ES5语法的工具

React概览

组件的创建与嵌套

React 应用程序是由 组件 组成的。一个组件是 UI(用户界面)的一部分,它拥有自己的逻辑和外观。组件可以小到一个按钮,也可以大到整个页面。

相比于Vue,React的组件更偏向于纯粹的 JS ,React组件是返回标签的 JavaScript 函数

import "./style.css"
//可以引入样式
​
function MyButton(){
    //一些其他逻辑
    return (
        <button>I'm a button</button>
    )
}

像这样,一个函数组件内部包含自己的样式,逻辑,返回一个标签

React组件可以进行嵌套:

import MyButton from "目录"
​
export default function MyApp(){
//注意:必须将组件暴露出去,才可以在其他文件中导入该组件
    return (
        <div>
            <h1>My React App</h1>
            <MyButton />
        </div>
    )
}

React 组件必须以大写字母开头,而 HTML 标签则必须是小写字母。

JSX

React 使用JSX 来替代常规的JavaScript

JSXHTML 更加严格。你必须闭合标签,如 <br />

组件不能返回多个 JSX 标签,必须将它们包裹到一个共享的父级中,比如 <div>...</div> 或使用空的 <>...</> 包裹:

function ExampleComponent(){
    return (
        <>
            <h1>Title</h1>
            <p>Something</p>
        </>
    );
}

添加样式

React 中,为标签添加 CSSclass 需要使用 className ,其与 HTMLclass 属性的工作方式相同

<img className='avatar' />

显示数据

JSX 中,函数组件最终会 return 一个标签,而如果想在标签内部嵌入 JS 代码,需要使用到大括号:{}

return (
    <h1>
        {user.name}
    </h1>
);

在标签上同样可以使用大括号将 JSX 属性转移到 JavaScript

return (
    <img
        className="avatar"
        src={user.imageUrl}
    />
)

只要在大括号之内,就可以转义为 JavaScript 代码,从而更加灵活地实现代码逻辑

一个误区:在某些时候 ,我们使用这种语法时会将某个对象转义为 JavaScript 代码

<li
  key={product.id}
  style={{
    color: product.isFruit ? 'magenta' : 'darkgreen'
  }}
>

这样的语法并不是双大括号,而是在大括号内蕴含一个对象

条件渲染

React 没有特殊的语法来编写条件语句,因此使用的就是普通的 JavaScript 代码。

let content;
if (isLoggedIn) {
  content = <AdminPanel />;
} else {
  content = <LoginForm />;
}
return (
  <div>
    {content}
  </div>
);

例如 if 语句,三目运算符,甚至利用逻辑短路

渲染列表

假设有一个产品数组:

const products = [
  { title: 'Cabbage', id: 1 },
  { title: 'Garlic', id: 2 },
  { title: 'Apple', id: 3 },
];

可以借助 map 函数来渲染对应列表标签

const listItems = products.map(product =>
  <li key={product.id}>
    {product.title}
  </li>
);

return (
  <ul>{listItems}</ul>
);

对于列表渲染,常常需要使用到 key

对于列表中的每一个元素,都应该传递一个字符串或者数字给 key,用于在其兄弟节点中唯一标识该元素。

响应事件

可以在组件中声明事件处理函数来响应事件

function MyButton() {
  function handleClick() {
    alert('You clicked me!');
  }

  return (
    <button onClick={handleClick}>
      Click me
    </button>
  );
}

响应式

React 中,使用 state 来进行某些属性的记录与更新

import { useState } from 'react';
//首先,从 React 引入 useState:

function MyButton() {
  const [count, setCount] = useState(0);
  //声明一个state变量
    
  function handleClick() {
    setCount(count + 1);
  }
  //事件处理函数

  return (
    <button onClick={handleClick}>
      Clicked {count} times
    </button>
  );
}

我们将从 useState 中获得两样东西:当前的 state(count),以及用于更新它的函数(setCount)。

在这一步,给 onClick 传递的是一个回调函数,在合适时间会被调用

如果需要给函数传参,需要将其修改:

<button onClick={()=>{handleClick(123)}}>
  Clicked {count} times
</button>

实际上,以 use 开头的函数被称为 HookuseState 就是 React 提供的一个内置 Hook。

  • 40
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值