跳到主要内容

react 问题解决

1. Plugin "react" was conflicted between "package.json » eslint-config-react-app »

rm -rf node_modules
rm pnpm-lock*
pnpm install

2. React 组件的名称首字母必须大写

3. JSX 语法注意事项

JSX 语法返回值可以写在同一行。

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

如何 JSX 返回值如果不处于同一行的话,需要用小括号包裹起来。

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

JSX 返回值只能够有一个顶级元素。

如果要在一个组件中包含多个元素,需要用一个父标签把它们包裹起来。

return (
<div>
<h1>海蒂·拉玛的待办事项</h1>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="Hedy Lamarr"
class="photo"
>
<ul>
<li>...</li>
</ul>
</div>
);

如果不想使用 <div></div> 可以使用 <></>

return (
<>
<h1>海蒂·拉玛的待办事项</h1>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="Hedy Lamarr"
class="photo"
>
<ul>
...
</ul>
</>
);

标签必须闭合

  1. <img> 必须写成 <img/>
  2. <li>xxx 必须改成 <li>xxx</li>

使用驼峰式命名法给大部分属性命名

例如:classNamestrokeWidth 等。

具体见文档:https://zh-hans.react.dev/reference/react-dom/components/common

4. 永远不要再组件里面嵌套定义组件

错误做法:

export default function Gallery() {
// 🔴 永远不要在组件中定义组件
function Profile() {
// ...
}

// ...
}

正确做法:

export default function Gallery() {
// ...
}

// ✅ 在顶层声明组件
function Profile() {
// ...
}

5. 引入组件

下面 2 种方法均可。

import Gallery from './Gallery.js';
import Gallery from './Gallery';

6. 默认导出与具名导出

一个文件中,有且仅有一个默认导出,任意个具名导出。

默认导入/导出

export default function Button() {
// ....
}
import Button from './Button.js';

默认导入时,可以在 import 后面随意命名。

import Banana from './Button.js';

具名导入/导出

export function Button() {
}

导入、导出的名称必须一致。

import {Button} from './Button.js';

7. 在 JSX 中使用 JavaScript

通过 {} 来使用 js。

export default function TodoList() {
const name = 'Gregorio Y. Zara';
return (
<h1>{name}的待办事项列表</h1>
);
}

哪里可以使用大括号?

  1. JSX 标签内的文本
    • <h1>{name}'s To Do List</h1> 有效
    • <{tag}>Gregorio Y. Zara's To Do List</{tag}> 无效
  2. 紧跟在 = 符合后面的属性
    • src={avatar} 读取 avatar 变量 正确使用
    • src="{avatar}" 只会传一个字符串 {avatar} 错误使用, JSX 内引号的值会作为字符串传递给属性。

双大括号 {{}}

export default function TodoList() {
return (
<ul style={{
backgroundColor: 'black',
color: 'pink'
}}>
<li>Improve the videophone</li>
<li>Prepare aeronautics lectures</li>
<li>Work on the alcohol-fuelled engine</li>
</ul>
);
}

8. 组件之间传递 Props