跳转至

React 基础

官方文档

HTML转JSX


命令

# 项目创建
npx create-react-app 名称

# 启动项目
npm start

# 启动项目
npm run dev

# 安装项目依赖
npm install

# 构建项目
npm run build

导入

import 组件名 from './组件文件.js';
import { 具名组件 } from './组件文件.js';

组件

定义组件

function 名称() { }

默认导出组件

export default function 名称() { }

具名导出组件

export function 名称() { }

返回标签

return <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />;
return (
  <div>
    <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
  </div>
);

语法

大括号使用

<img className={avatar} src={avatar}/>

<h1>{name}'s To Do List</h1>

<h1>To Do List for {formatDate(today)}</h1>

双大括号

双大括号包裹的是对象

<ul style={
  {
    backgroundColor: 'black',
    color: 'pink'
  }
}>

对象创建与使用

const person = {
  name: 'Gregorio Y. Zara',
  theme: {
    backgroundColor: 'black',
    color: 'pink'
  }
};

<h1 style={person.theme}>{person.name}'s Todos</h1>

JSX

JSX规则 用于返回多个根元素
<></>

传递参数

function Avatar({ person, size = 100 }) {
  // ...
}

<Avatar person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }} size={100} />
function Avatar(props) {
  let person = props.person;
  let size = props.size;
  // ...
}

<Avatar person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }} size={100} />
// 将父组件的props值全部传递给子组件
<Avatar {...props} />

children

组件嵌套

function Card({ children }) {
  return (
    <div>
      {children}
    </div>
  );
}

function Profile() {
  return (
    <Card>
      <Avatar />
    </Card>
  );
}

map 列表

const listItems = 数组.map(变量 =>
  <li>...</li> // 隐式地返回
);

const listItems = 数组.map(变量 => { // 花括号
  return <li>...</li>;
});

条件渲染

function 组件名() {
  if (条件){
    return HTML标签;
  }
  return HTML标签;
}
描述

也可以返回 null

三目运算符

条件? 内容1 : 内容2
描述

条件为true时返回内容1, 条件为false时返回内容2

条件? 内容1
描述

只有条件满足时渲染


for

for (let i = 1; i <= 12; i++) {
    // 代码
}

switch

switch (变量){
    case 值1:
        return HTML标签
    case 值2:
        return HTML标签
    default:
        return HTML标签
}

onClick

<button onClick={onClick}></button>

function onClick(e) {
    // e 是触发此事件函数的组件
}
<button onClick={() => {
  onClick()
}}></button>
<button onClick={e => onClick()}></button>

useState

状态

const [person, setPerson] = useState(默认值);

// 设置新值
setIndex();

// 状态更改
setIndex({
  ...person,
  name: 新值
});

setIndex({
      ...person,
      artwork: {
        ...person.artwork,
        title: 新值
      }
});

// 在下次渲染前多次更新同一个 state
setIndex(变量 => );
描述

设置变量名 用于设置的变量名 默认值

更新 state 中的对象

state 中可以保存任意类型的 JavaScript 值,包括对象。但是,你不应该直接修改存放在 React state 中的对象。相反,当你想要更新一个对象时,你需要创建一个新的对象(或者将其拷贝一份),然后将 state 更新为此对象。

// 属性的动态命名
 function handleChange(e) {
    setPerson({
      ...person,
      [e.target.name]: e.target.value
    });
}

筛选

setArtists(
  数组.filter(a => a.id !== artist.id)
);

强制重置组件

只需要给组件key赋予 状态 值 当状态改变时组件也会跟着重置

<组件 key={状态.}/>

Context

// 定义
const LevelContext = createContext(0);

// 获取
const level = useContext(LevelContext);
描述

定义的对象名称大写

可以单独在一个文件内定义

// 子组件获取 Context对象 值时会获取上层最近组件传递的值

<Context对象.Provider value={}>
    子组件
</Context对象.Provider>

事件

事件命名都是以handle开头

<button onClick={function handleClick() {
  alert('你点击了我!');
}}>

<button onClick={() => {
  alert('你点击了我!');
}}>

阻止事件传播

在子组件触发的事件函数中运行,

e.stopPropagation();
描述

阻止因点击子组件而触发父组件的事件行为

阻止浏览器默认行为

e.preventDefault();