一 组件props
作用:给组件传递数据,是React组件通讯的基础
使用步骤:
1、传递props:在组件标签上添加属性
2、接收props:通过参数拿到
推荐:使用解构,接收props
二 父子组件通讯
原则:谁的数据谁负责
1、父=》子 (传递props)
父组件提供数据,通过props传递给子组件使用
2、子=》父
a、父组件准备修改数据的函数,传递给子组件
b、子组件调用函数,将数据作为参数回传给父组件
三 兄弟组件通讯
1、找到父组件,提供共享数据
2、使用数据,例如聊天工具左边好友列表,右边聊天窗口,展示好友名称(父到子通讯)
3、修改数据,切换选中好友(子到父通讯)
状态提升:如果两个兄弟组件要通讯,就把共享数据提升到公共父组件中
四 后代关系组件通讯
Context(上下文):范围,无视组件层级关系,跨组件通讯
1、创建Context对象
2、划定范围,提供共享数据
3、范围内的组件,获取共享数据
五 useEffect的使用
useEffect的作用:在组件生命周期的三个阶段(挂载、更新、卸载),执行网络请求、浏览器API等操作
这些操作,也叫:副作用(side effects),用于连接外部系统
语法:useEffect(Effect函数,依赖项数组)
副作用代码 控制Effect函数的执行时机,可选
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import { useEffect, useState } from "react"; import "./App.scss"; const ChatRoom = ({ roomId }) => { console.log("当前房间", roomId); // useEffect(() => { // console.log("建立连接:music房间"); // }, []); // useEffect(() => { // console.log(`建立连接:${roomId}房间`); // }, [roomId]); useEffect(() => { return () => { console.log("断开连接"); }; }, []); return ( <div className="chat-room"> <h1>欢迎来到{roomId}房间!</h1> </div> ); }; const App = () => { const [roomId, setRoomId] = useState("music"); const [chatting, setChatting] = useState(true); return ( <div className="app"> <button onClick={() => setChatting(!chatting)}> {chatting ? "退出聊天" : "开始聊天"} </button> {chatting ? ( <div> <label> 选择聊天室: <select value={roomId} onChange={(e) => setRoomId(e.target.value)}> <option value="music">music</option> <option value="travel">travel</option> <option value="sports">sports</option> </select> <ChatRoom roomId={roomId} /> </label> </div> ) : ( <p>点击【开始聊天】按钮,开始吧</p> )} </div> ); }; export default App;
5.1 useEffect的扩展
1、推荐:一个useEffect负责一个完整功能;执行过程:挂在:1,更新:2、1,卸载:2
2、依赖性:useEffect(()=>{/*可变值*/},[可变值1,可变值2])
需要作为依赖项的值:Effect中用到的可变值,比如,props/state/组件内创建的变量等
不需要作为依赖项的值:组件外创建的或导入的变量、函数等
5.3 useEffect发送请求
n切换node版本: n 15.0.1
本地起json服务:npx json-server ./data.json --port 8080
新建终端,安装axios: npm i axios
场景:组件初次渲染时,发送请求获取数据
步骤:1.调用useEffect,依赖项为空数组;2.创建新函数,在该函数上使用async,并调用;3.发送请求,通过await获取到数据,然后使用
注意:1、不要直接在Effect函数前面添加async关键字,因为它是同步的
2、useEffect:只处理跟组件挂载、更新、卸载相关的请求代码;事件处理程序:处理点击等用户操作时的请求代码
六 React Hooks解释和使用规则
React Hooks是以use开头的函数,比如,useState,useEffect,useContext等
Hooks(钩子):为组件提供不同的额React特性,比如,useSate Hook为组件提供状态
使用规则:只能在组件的顶层调用,不能嵌套在if、for、其他函数中
原理:React组件依赖Hooks的调用顺序,必须保证所有Hooks,在每次渲染时,调用顺序一致。
七 实践
展示或隐藏频道弹窗,渲染频道数据,移除或添加频道