提交作业(疑惑)

来源:4-6 作业练习 - 用 Hook + TS + TS泛型实现useArray

weixin_慕丝2377090

2022-05-03

import React, { useState } from "react";


const useArray = <T>(params: T[]) => {
    const [useArraystate, setuseArraystate] = useState(params)

    const value = useArraystate
    const clear = setuseArraystate([])
    const removeIndex = (index: number): void => setuseArraystate([...useArraystate].splice(index, 1))
    const add = (item: T) => setuseArraystate([...useArraystate, item])
    // const add = (item: T) => setuseArraystate(useArraystate.push(item))
    // 报错: 类型“number”的参数不能赋给类型“SetStateAction<T[]>”的参数

    return {value, clear, removeIndex, add}
}

为什么:

const add = (item: T) => setuseArraystate(useArraystate.push(item))
// 报错: 类型“number”的参数不能赋给类型“SetStateAction<T[]>”的参数

会报这个错误啊,我对item:T,限定类型了啊,且parmas:T[]是一个数组,不应该不能使用push才对。

写回答

2回答

粉墨登场

2022-07-11

因为 push 函数返回的是新数组的长度,类型自然会报错。

这段代码最终 set 的是 push 函数的返回值。应该用你第一个 add 函数

const add = (item: T) => setuseArraystate(useArraystate.push(item))


0
1
weixin_慕丝2377090
非常感谢!
2022-07-18
共1条回复

Nolan

2022-05-05

仔细对比一下作业答案吧

0
0

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程

相似问题

作业提交

回答 1

提交作业

回答 1

4-6作业提交

回答 1

4-6提交作业

回答 1

4-6 作业提交

回答 1