diff --git a/react/react文档.md b/react/react文档.md
new file mode 100644
index 0000000..0ce6bc0
--- /dev/null
+++ b/react/react文档.md
@@ -0,0 +1,224 @@
+# 快速入门
+## 创建和嵌套组件
+React应用由组件组成,每个组件都是UI的一部分,组件拥有自己的外观和逻辑。
+### 组件是返回标签的js函数
+```js
+function MyButton() {
+ return (
+
+ );
+}
+```
+上述已经声明了MyButton组件,可以将该组件嵌套到另一个组件中
+```js
+export default function MyApp() {
+ return (
+
`或`<>`中
+ ```js
+ function AboutPage() {
+ return (
+ <>
+
About
+
Hello there.
How do you do?
+ >
+ );
+ }
+ ```
+
+## 添加样式
+React中,可以在标签中添加`className`属性来添加样式,其和html中的`class`工作方式相同
+```html
+
![]()
+```
+```css
+/* In your CSS */
+.avatar {
+ border-radius: 50%;
+}
+```
+## 显示数据
+在jsx中,标签位于js中,而可以在标签内通过`{}`来计算js表达式并将其填充到标签中
+```js
+return (
+
+ {user.name}
+
+);
+```
+jsx还可以将表达式的值传递给标签属性,通过`{}`传递表达式的值
+```js
+return (
+

+);
+```
+同时,可以通过js表达式来复制css
+```js
+const user = {
+ name: 'Hedy Lamarr',
+ imageUrl: 'https://i.imgur.com/yXOvdOSs.jpg',
+ imageSize: 90,
+};
+
+export default function Profile() {
+ return (
+ <>
+
{user.name}
+

+ >
+ );
+}
+```
+## 条件渲染
+在React中,没有特殊语法编写条件,故而可以在js中通过if条件引入jsx:
+```js
+let content;
+if (isLoggedIn) {
+ content =
;
+} else {
+ content =
;
+}
+return (
+
+ {content}
+
+);
+```
+也可以使用如下方式:
+```js
+
+ {isLoggedIn ? (
+
+ ) : (
+
+ )}
+
+```
+## 渲染列表
+可以通过如下方式将js数组渲染为列表
+```js
+const products = [
+ { title: 'Cabbage', id: 1 },
+ { title: 'Garlic', id: 2 },
+ { title: 'Apple', id: 3 },
+];
+const listItems = products.map(product =>
+
+ {product.title}
+
+);
+
+return (
+
+);
+```
+上述示例中,`
`有一个key属性,对于列表中的每个属性,都应该传递给其一个字符串或数字的key,用于在兄弟节点之间唯一标识该元素。
+
+## 响应事件
+可以在组件中声明事件处理函数来响应事件
+```js
+function MyButton() {
+ function handleClick() {
+ alert('You clicked me!');
+ }
+
+ return (
+
+ );
+}
+```
+## 更新界面
+如果希望组件维护状态信息,可以通过导入useState来完成
+```js
+import { useState } from 'react';
+
+function MyButton() {
+ const [count, setCount] = useState(0);
+```
+其中,count记录当前的状态,而setCount则是用于改变状态的函数,可以为数组中变量取任何名称。
+```js
+import { useState } from 'react';
+
+export default function MyApp() {
+ return (
+
+
Counters that update separately
+
+
+
+ );
+}
+
+function MyButton() {
+ const [count, setCount] = useState(0);
+
+ function handleClick() {
+ setCount(count + 1);
+ }
+
+ return (
+
+ );
+}
+```
+## 使用hook
+以`use`开头的函数被称为hook,useState是react提供的一个内置hook。
+hook比普通函数更为严格,只能在组件顶层或其他hook的顶层调用hook。如果想要在条件或循环中使用hook,请新建一个组件并在组件内部使用。
+## 组件之间共享数据
+如果想要将状态在多个组件之间共享,需要将状态提升存储到最近的公共父组件中
+```js
+export default function MyApp() {
+ const [count, setCount] = useState(0);
+
+ function handleClick() {
+ setCount(count + 1);
+ }
+
+ return (
+
+
Counters that update together
+
+
+
+ );
+}
+
+function MyButton({ count, onClick }) {
+ return (
+
+ );
+}
+```
+此时,由MyApp传递给MyButton的值称之为prop
+
+
+