数字马力 前端一面 时间50分钟

1.项目介绍,亮点

2.路由怎么实现的,react-router cacherouter是干嘛的,hash router和history router的区别

  1. 安装react-router-dom
  2. 创建路由组件
  3. 使用BrowserRouter或HashRouter包裹应用
  4. 在组件中使用Link进行导航

其中Browser或HashRouter包裹应用

import {BrowserRouter as Router, Route, Switch} from "react-router-dom";

function App(){
	return (
		<Router>
			<Switch>
				<Route path="/path" component={Home} />
				<Route path="/about" component={About} />
			</Switch>
		</Router>
	)
}

使用Link

import {Link} from "react-router-dom";
function Navigation(){
	return (
		<nav>
			<ul>
				<li><Link to="/home">Home</Link></li>
				<li><Link to="/about">About</Link></li>
			</ul>
		</nav>
	)
}

3.useffect怎么实现副作用的,怎么在卸载前取消订阅

import React, {useState, useEffect} from "react";

function ExampleComponent(){
	const [data, setData] = useState(null);
	useEffect(()=>{
		const fetchDate = async () => {
			const result = await fetch("http://api.com");
			const jsonData = await result.json();
			setData(jsonData);
		}

		return ()={
		//返回的清理函数在组件卸载时执行,用于取消订阅或执行其他清理操作。
		};
	}, []);

return (
	<div>
		{data && <p>{data}</p>}
	</div>
	)
}

4.script阻塞怎么解决,具体讲讲defer和async的区别

脚本阻塞是指浏览器在解析HTML文档时遇到scirpt标签时会停止渲染并下载执行脚本。

使用defer和async来控制脚本的加载和执行

defer告诉浏览器立即下载脚本,但是等文档解析完了再执行。使用defer会在DOMContentLoaded事件之前执行,但是在DOMContentLoaded事件之前执行,浏览器仍然可以并行下载其他资源

async要求浏览器下载完脚本立即执行。不会等文档解析完成。多个带有async属性的脚本会并行下载,下载完成后立即执行,不会按照出行顺序去执行。

区别:

  1. 执行时机
    1. defer在文档解析完成后执行
    2. async在下载完成后立即执行,不会等待文档解析完成
  2. 执行顺序
    1. defer安装文档出现顺序执行
    2. async不保证执行顺序,谁下载完谁先执行
  3. 对文档解析的影响
    1. defer不会阻塞文档解析,但会等待文档解析完成后执行
    2. async会立即下载并执行,不会等待文档解析完成

5.react为什么需要hooks

为了解决组件之间的复用状态逻辑,解决了复用性差、代码冗长、难以理解的生命周期的问题。

并带来以下优势:

Hooks列表:

6.react class组件和函数组件的区别

7.react fiber是干嘛的

react fiber是react 16引入的一种重新实现的调度算法,用于实现更加高效的组件渲染和更新。目标是实现更好的时间分片和异步渲染,提高性能和用户体验。
主要作用包括:

8.react redux是怎么更新ui的,除了react-redux其他store有了解吗?

React Redux中,但应用状态发生变化,会通过store来更新UI。通过store.dispaptch(action)派发一个action,这个action会被传递给reducer,然后reducer根据action的类型来更新相应状态。

还有mobx、zustand、recoil

9.antd config.privider

ant design中config.provider是一个用于配置全局样式主题的属性。通过设置config.provider,可以定义Ant Design组件中的各种样式变量。从而自定义整个应用程序的主题风格。通常config.provide

10.实现水平垂直居中的方案

11.less如何实现第1-8个元素不同的颜色

.container{
	.centered {
	
		position: absolute;
		top: 50%;
		left: 50%;
		transform: translate(-50%, -50%);
	@color: #fff, #fff, #fff, #ff1, #ff2, #ff2
	.loop-colors(@index) when (@index > 0){
		&:nth-child(@{index}){
				background-color: extract(@colors, @index);
			}
		.loop-colors(@index - 1);
		}
	.loop-colors(8);
	}

}

12.this了解多少,箭头函数的this为什么在定义时就已经确定

this在调用时确定的,不是在定义的时候确定的。

13.js事件循环

14.h5多线程,多线程有什么限制

HTML5没有直接的多线程能力,但是通过web workers技术,可以在浏览器中创建多线程。

限制

15.babel怎么实现向后兼容的

16.git多人开发时,临时存储方案

git stash
git stash apply

17.ts泛型是什么?什么时候用到

是一种在定义函数、类、接口时刻从夫组件的工具。允许定义是不指定具体的类型,而是使用时再指定类型,从而使得这个可重复的组件能够使用与多种不同类型的数据。

1、函数泛型:

function identity<T>(arg: T): T{
	return arg;
}

let result = identity<string>("Hello");

2、类泛型:可以定义类,其中有些属性或者方法的类型的泛型

class Box<T> {
	private value: T;

	constructor(value: T){
		this.value = value;
	}

	getValue(): T {
		return this.value;
	}

}
let box = new Box<number>(10);

3、接口泛型:可以定义接口,其中某些成员是泛型

interface Pair<T, U> {
	first: T;
	second: U;

}

let pair: Pair<number, string> = {first: 1, second: "two"};
  1. 数组泛型
let array: Array<number> = [1, 2, 3];