【发布时间】:2019-10-22 21:44:52
【问题描述】:
我正在做一个关于 React Hooks 和获取数据的教程。这是我获取客户并将其映射到列表中的组件:
const useFetch = (url: string) => {
const [customers, setCustomers] = useState<null | []>(null);
const [loading, setLoading] = useState(true);
// Similiar to componentDidMount() and componentDidUpdate()
useEffect(() => {
const fetchData = async () => {
const result = await axios(url);
setCustomers(result.data);
setLoading(false);
};
fetchData();
});
return { customers, loading };
};
const url = 'https://jsonplaceholder.typicode.com/users';
export const LatestCustomers: React.FC<Props> = ({
description
}: Props): JSX.Element => {
const { customers, loading } = useFetch(url);
return (
<Container>
{loading ? (
<div>...Loading...</div>
) : (
<tr>
{customers.map(customer => (
<div key="user.id">{customer.name}</div>
))}
</tr>
)}
</Container>
);
};
这样,我得到了错误:
Object is possibly 'null'. TS2531
108 | ) : (
109 | <tr>
> 110 | {customers.map(customer => (
| ^
111 | <div key="user.id">{customer.name}</div>
112 | ))}
113 | </tr>
我该如何解决这个问题?
【问题讨论】:
-
也许
const { customers = [], loading } = useFetch(url);会解决 -
这个问题有几种解决方案,但基本上都是:1.确保它永远不会为空;或 2. 处理它可能为 null 的可能性(
null.map是TypeError)。
标签: reactjs typescript api react-hooks