6个React Hook最佳实践技巧,一起学前端

};

class Link extends React.Component {

static methodsAreOk() {

return true;

}

constructor(props) {

super(props)

this.state = {

user = null

}

}

componentDidMount() {

console.log(‘component did mount’)

}

componentDidUpdate() {

console.log(‘component did update’)

}

componentWillUnmount() {

console.log(‘component will unmount’)

}

render() {

return {this.props.text}

}

}

Link.propTypes = propTypes

Link.defaultProps = defaultProps

export default Link

编写函数组件时并没有构造器和生命周期函数,因此你可能会犯糊涂,因为这种结构并不像类组件里那样是强制的:

function App() {

const [user, setUser] = useState(null);

useEffect(() => {

console.log(“component is mounted”);

}, []);

const [name, setName] = useState(‘’);

return 

React component order

;

}

但就像类组件一样,为函数组件创建定义的结构能够改善项目的可读性。

建议先使用 useState Hook 声明状态变量,然后使用 useEffect Hook 编写订阅,接着编写与组件作业相关的其他函数。

最后,你得返回要由浏览器渲染的元素:

function App() {

const [user, setUser] = useState(null);

const [name, setName] = useState(‘’);

useEffect(() => {

console.log(“component is mounted”);

}, []);

return 

React component order

;

}

通过强制一种结构,可以让代码流在众多组件之间保持一致,看起来也比较亲切。

useState 的用法可以和类组件的状态完全一致,不只用于单个值

许多 useState 示例会向你展示如何通过声明多个变量来声明多个状态:

const [name, setName] = useState(‘John Doe’);

const [email, setEmail] = useState(‘johndoe@email.com’);

const [age, setAge] = useState(28);

但是 useState 实际上既可以处理数组也可以处理对象。你依旧可以将相关数据分组为一个状态变量,如以下示例所示:

const [user, setUser] = useState(

{ name: ‘John Doe’, email: ‘john@email.com’, age: 28 }

);

这里有一个警告。使用 useState 的更新函数更新状态时,以前的状态会替换为新状态。这与类组件的 this.setState 不同,后者的新类中,新状态会与旧状态合并:

const [user, setUser] = useState(

{ name: ‘John’, email: ‘john@email.com’, age: 28 }

);

setUser({ name: ‘Nathan’ });

// result { name: ‘Nathan’ }

为了保留以前的状态,你需要创建将当前状态值传递到自身中的回调函数来手动合并它。由于上面的示例已将 user 变量分配为状态值,因此可以将其传递给 setUser 函数,如下所示:

setUser((user) = > ({ …user, name: ‘Nathan’ }));

// result is { name:‘Nathan’, email: ‘john@email.com’, age: 28 }

根据数据在应用程序生命周期中的变化情况,建议在各个值彼此独立时将状态拆分为多个变量。

但是对于某些情况,例如构建一个简单的表单,最好将状态分组在一起,以便更轻松地处理更改和提交数据。

简而言之,你需要在多个 useState 调用和单个 useState 调用之间保持平衡。

使用自定义 Hooks 共享应用程序逻辑

在构建应用程序时,你会注意到一些应用程序逻辑会在许多组件中一次又一次地使用。

随着 React Hooks 的发布,你可以将组件的逻辑提取到可重用的函数中作为自定义 Hooks,如我在以下文章中所展示的那样:

可扩展 React 项目的 6 个技巧和最佳实践:

https://blog.bitsrc.io/best-practices-and-tips-for-a-scalable-react-application-db708ae49227

你可以使用 Bit 之类的工具将 Hooks 发布到单个集合中,这样你就可以在不同的应用程序中安装和重用它们。它不需要你创建一个全新的“Hooks 库”项目,你可以一点点将新的 Hooks 从任何项目“推入”你的共享集合。

针对这个方法,唯一要强调的是你不能在类组件中使用 Hooks。所以如果你的项目中还有老式的类组件,就需要将它们转换为函数,或者使用其他可重用逻辑模式(HOC 或渲染 Props)。

使用 useContext 避免 prop drilling

prop-drilling 是 React 应用程序中的常见问题,指的是将数据从一个父组件向下传递,经过各层组,直到到达指定的子组件,而其他嵌套组件实际上并不需要它们。

考虑以下示例:

https://bit.dev/nsebhastian/tutorial-examples/prop-drill-example?example=5f941e4445728c001924150a

从示例中可以看到,即使 Hello 组件不需要 props,App 组件也会通过 Hello 组件将 name props 传递给 Greeting 组件。

React Context 是一项功能,它提供了一种通过组件树向下传递数据的方法,这种方法无需在组件之间手动传 props。父组件中定义的 React Context 的值可由其子级通过 useContext Hook 访问。

在下面的示例中,我将 name 数据(而非 props)传递给 Context Provider,给代码做了重构:

https://bit.dev/nsebhastian/tutorial-examples/prop-drill-example?example=5f941fae45728c001924150e

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

判断

回到题目,如果你真想检验一个人的水平。第一步先考察一下基本的编程基础,问几个基本的编程问题,可以和前端相关也可以无关。比如垃圾收集大致是怎么做的,setTimeout 大致做了什么(说会在另一个线程里执行回调的直接毙掉)。

第二步考察一下知识面,问问http、tcp的基本知识,dns是怎么工作的,或者常用框架的实现原理,看看候选人是不是除了自己的一亩三分地什么都不关心。

第三步考察hold业务逻辑的能力,从一个简单的注册页,或者查询页开始,先让说下代码的基本架构,然后需求、性能、可靠性、安全层层加码,看看能不能很快的反馈出解决方案。能对答如流的要么做过,要么对他来说这种复杂度的东西是小case。

前三步都没问题,基本上说明候选人已经还行了,但是行到什么程度,不知道。如果想找比较厉害的,就增加个第四步,亮点项目考察。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了,我整理一套前端面试题分享给大家,希望对即将去面试的小伙伴们有帮助!

记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了,我整理一套前端面试题分享给大家,希望对即将去面试的小伙伴们有帮助!

[外链图片转存中…(img-u5MquX2h-1710586480941)]

[外链图片转存中…(img-plZuOhOe-1710586480941)]

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值