小编Jac*_*cob的帖子

props 的 TypeScript 条件类型

我有一个可以处于两种不同状态的组件:编辑模式和查看模式。为了适应这一点,我有一个联合类型来完成这项工作,但我仍然在组件的参数中收到 TypeScript 的抱怨:

type View = {
    isEditing: false;
    viewHandler: () => void;
    someOtherProp: any // this is unique to view mode
};

type Edit = {
    isEditing: true;
    editHandler: (id: string) => void;
};

export type MyProps = View | Edit;
Run Code Online (Sandbox Code Playgroud)

然后它在这里抱怨:

const Item: React.FC<MyProps> = ({
    isEditing = false,
    editHandler,
    ~~~~~~~~~~~
}) => {
Run Code Online (Sandbox Code Playgroud)

Property 'editHandler' does not exist on type 'PropsWithChildren<MyProps>'.

我缺少什么?

typescript reactjs react-typescript

12
推荐指数
1
解决办法
1万
查看次数

useEffect 在状态改变后不重新渲染

我正在构建一个小项目来更熟悉 Hooks,但我现在遇到了一个问题:

该项目是一个天气应用程序,从 API 中提取城市的天气数据。下面的代码是该应用程序的简化版本。\

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

const App: React.FC = () => {
    const [weather, setWeather] = useState<any>({})
    const [city, setCity] = useState<string>("London")
    const [cities, setCities] = useState<string[]>([
        "London",
        "New York",
        "Dubai",
        "Berlin",
        "Los Angeles",
        "Sydney",
    ])

    useEffect(() => {
        axios.get(`https://api-url/?query=${city}`)
            .then(res => setWeather(res.data))
            .catch ...
    }, [])

    return (
        <Drawer>
            <nav>
                <ul>
                    {cities.map((c, i) => (
                        <li key={i} onClick={() => setCity(c)}>
                            {c}
                        </li>
                    ))}
                </ul>
            </nav>
        </Drawer>
        // …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks

2
推荐指数
1
解决办法
2337
查看次数