React Hooks浅学使用

React Hooks

最近在写个老项目的时候,引入了hooks开发, 使用感觉非常愉快,同时也踩了一些坑。作为一名小白,单单写的时候我认为hooks带来的优点还是很多的,比如不需要写一堆生命周期了,不用每次this了。而且完全向下兼容很适合老项目中混用😁,本篇仅限于理解使用,不适于理解原理。

1.首先是写法的改变 我们可以渐渐放弃Class

// 原有的写法
class Demo extends React.Component {}
// hooks 写法 简洁!
function Demo() {}

2.useState 其实可以理解为原来的this.setState,白话来说就是用来存值、赋值的。熟悉vue的也可以理解为return里面的data()。初始值只有在第一次渲染才会用到,所以第一次如果你直接data.xxx会报错。每次set操作都会使页面渲染改变

import React, { useState } from 'react';
function Demo() {
	// 声明一个data变量,初始值为null 
	const [data, setData] = useState(null);
	// 取值用data,赋值用setData
}

3.useEffect 可以当做react中周期componentDidMount,componentDidUpdate 和componentWillUnmount 这三个的组合,绝大多数执行操作都可以放里面操作,我们常常在里面调取接口进行赋值。但是useEffect 如果你不去掌控它 ,它会在每次渲染、每次更新都会执行里面所有的代码,非常浪费性能

import React, { useEffect } from 'react';
// 默认情况下每次调用都会执行这个函数
useEffect(()=>{
	console.log('render')
)}

// 只执行一次
useEffect(()=>{
	console.log('render')
),[]}
import React, { useState,useEffect } from 'react';
function Demo() {
	const [data, setData] = useState(null);
	const [list, setList] = useState([]);
	// 仅在变量data发生改变后执行
	useEffect(()=>{
		console.log('render')
	),[data]}	// 增加依赖data
	
	useEffect(()=>{
		console.log('render')
	),[list,data]}	// 增加依赖list
}

看完以上三种不同场景,应该大致明白用法了,useEffect 可以根据依赖变化而执行,可以同时监听多个依赖,也能有多个useEffect

4.useContext(上下文)用于解决react传参的问题,以下是子向父传值的操作。
注意事项:useContext不是响应式的

// 父组件 father.jsx
import React,{ useState,useEffect,createContext } from "react"
import Child from "./child.jsx"
export const DemoContext = createContext();	// 创建上下文
export default function Father() {
	const [name,setName] = useState
	return(
		<div> 
			// 圈定作用域
			<DemoContext.Provider value={{ name, setName }}>
				<Child />
			</DemoContext.Provider>
			<div> {name} </div> {/* name=我是子组件传的值 */}
		</div>
	)
}
// 子组件 child.jsx
import React,{ useState,useEffect,useContext } from "react"
import { DemoContext } from './father.jsx'
export default function Child(){
 	let { name, setNmae } = useContext(DateContext);
	useEffect(()=>{
		const childName ='我是子组件传的值'
		setName(childName)
	),[]}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值