2023-07-19 面试
问题
1. 自我介绍
react
使用的是类组件还是函数式组件
2. 在刚接触 react
时,使用的是类组件,随着 react
新版本的推出和 hooks 的出现,并且浏览 react
官网时,发现官方推荐使用函数式组件,并且使用函数式组件对官网进行了重构,所以后来就一直使用函数式组件。
hook
3. 介绍一下常用的 useState
useState
的返回值是一个数组,数组的第一个元素是状态,第二个元素是修改状态的函数,修改状态的函数接收一个参数,参数是状态的新值,修改状态的函数会将状态的新值赋值给状态,同时触发组件的重新渲染。
主要用来保存组件的状态,当组件的状态发生变化时,会触发组件的重新渲染。
useEffect
useEffect
接收两个参数,并且允许有一个返回值,第一个参数是一个函数,第二个参数是一个数组,当第二个参数不传时,每次渲染都会调用,当第二个参数传空数组时,只会在第一次渲染时调用,当第二个参数传入一个数组时,只有数组中的值发生变化时才会调用。return
的值是一个函数,当组件卸载时会调用。
常见的使用场景 发送网络请求,清除定时器,移除事件监听器
useRef
useRef
的返回值是一个对象,对象的 current
属性是一个可变的值,可以用来保存任意值,当 current
属性的值发生变化时,不会触发组件的重新渲染。
常见的使用场景 获取 DOM
元素
useMemo
使用 useMemo
可以传递一个创建函数和依赖项,创建函数会需要返回一个值,只有在依赖项发生改变的时候,才会重新调用此函数,返回一个新的值。简单来说,作用是让组件中的函数跟随状态更新(即优化函数组件中的功能函数)。
使用:
- 接收一个函数作为参数
- 同样接收第二个参数作为依赖列表
- 返回的是一个值。返回值可以是任何,函数、对象等都可以
类似于 Vue
里面的计算属性,当依赖项发生变化时,才会重新计算
useCallback
useCallback
用来缓存函数,当依赖项发生变化时,才会重新创建函数,返回的是一个函数。
useContext
useContext
是让子组件之间共享父组件传入的状态的,简化了跨层级组件传值的操作。
useEffect
调用次数问题
4. - 第二个参数不写调用几次?
第二个参数不写,每次渲染都会调用
- 第二个参数写空数组调用几次?
第二个参数写空数组,只会在第一次渲染时调用
5. 写一个左边按钮,右边按钮,中间显示 hello world 点击左边减少 world 右边增加 world
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.container {
width: 600px;
height: 300px;
border: 1px solid #ccc;
margin: 0 auto;
display: flex;
justify-content: space-around;
align-items: center;
}
.sub {
width: 50px;
height: 50px;
}
.add {
width: 50px;
height: 50px;
}
.main {
width: 450px;
height: 100%;
text-align: center;
word-break: break-all;
display: flex;
justify-content: center;
align-items: center;
}
</style>
</head>
<body>
<div id="app">
<div class="container">
<button class="sub" @click="sub">减一</button>
<div class="main">{{message}}</div>
<button class="add" @click="add">加一</button>
</div>
</div>
<script type="module">
import {
createApp,
ref,
toRef,
} from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
createApp({
setup() {
const message = ref("Hello World!");
const sub = () => {
// 点击一次减少一个World
message.value = message.value.replace(/World/, "");
};
const add = () => {
// 点击一次增加一个World
message.value += " World";
};
return {
message,
sub,
add,
};
},
}).mount("#app");
</script>
</body>
</html>
Git
常用命令
6. 说一下 git init
初始化一个本地仓库git add
将文件添加到暂存区git commit
将暂存区的文件提交到本地仓库git push
将本地仓库的文件推送到远程仓库git pull
将远程仓库的文件拉取到本地仓库git branch
分支相关操作git branch
查看分支git branch [name]
创建分支
git checkout
切换分支git merge
合并分支git log
查看提交记录git reset
回退版本git revert
撤销提交
7. 对公司的疑问
可以实习多久?