Skip to content

没有运行环境,都是手改;

“我的眼睛就是尺!”

1,实现定时器

js
<Countdown timeleft={} />

const Countdown = (timeleft) => {
    const [time,setTime] = useState(timeleft)
    useEffect(()=>{
        const timer = setInterval(()=>{
            setTime(prevTime=>{
                if(prevTime<=1){
                    return 0
                }else{
                    return prevTime - 1
                }
            })
        },1000)

        return ()=>clearInterval(timer)
    },[time])
    return(
        <div>time:{time}</div>
    )
}

2, 说说react的生命周期 我就结合useEffect说了一下: return ()=>clearInterval(timer)这里是componentWillUnmounted

空deps是componentDidMount

deps有值的话,是componentDidUpdate

3, 在老版本中,为啥你代码里没用到react但是需要import?

因为进行jsx转换编译执行的时候会自动执行一个React.createElement

在React17+的版本中,JSX到JavaScript的转换发生在构建时,所以不再需要显示导入了;

4,React.createElement与虚拟dom的关系是? 创建虚拟dom

5,兄弟节点通信的方式?

就说了两个:

  • 全局状态管理 redux,jotai和zustand
  • context api, 用Provider同时给两个传值

有一说一,昨天面wxg,那边问问用这两个库的好处;没说出来;

6,比较这两个写法的区别

js
return Countdown({timeleft: xxx })  vs return <Countdown timeleft={} />

7, fragment是做什么的? 它现在已经被优化成了<></>语法糖, 用处就是,便于添加多个子节点,同时不会造成别的渲染;

比如你用div来包裹的话,它还会应用上div的特性;

8, “简单”输出题

js
function changeStuff(a, b, c) {
  a = a * 10;
  b.item = "changed";
  c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);
console.log(obj2.item);

9, 0.1加0.2,为什么不等于0点3?

位运算,0.1和0.2转成二进制都是无限小数,会被自动忽略尾数;因此会有误差;

10,如何解决精度问题?

答了在开发中,对精度的要求并没有这么高,在个别场景下,可以直接Math.floor()

11,如果涉及交易呢?

答:可以用一些涉及浮点数的第三方库;

12,写一个正则吧,写一个YYYYMMDD的正则

....

13, Promise如何处理异常

js
Promise.reject("xxx")

直接回答了catch和try catch

然后写了这种

js
Promise.reject("error")
  .catch(error => {
    console.error(error);
  });

然后,他反问,“你不会async/await”? 我说我会;然后到了下一题;

后面复盘才发现,他应该是要我这样写:

js
async function handleError() {
  try {
    await Promise.reject("error");
  } catch (error) {
    console.error(error);
  }
}

14, 输出题

js
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}

console.log("script start");
async1();
console.log("script end");

15, 手写一个reduce,细节还是很多的;

js
Array.prototype.reduce(callback,initValue){
    // 初始值的细节
    let acc = initValue !== undefined ? initValue : this[0]
    let startIndex = initValue !== undefined ? 0 : 1

    for(let i=startIndex;i<this.length;i++){
        acc = callback(acc,this[i],i,this)
    }
    return acc
    // 这里没有实现处理空值的情况 比如这种:[0,,01,2]
}
本站访客数 人次 本站总访问量