2 回答
TA贡献1835条经验 获得超7个赞
根据文档https://reactjs.org/docs/hooks-rules.html
从 React 函数组件调用 Hooks
在你的情况下,你的函数不是一个组件,它是一个返回组件的函数
您可以更改代码以摆脱 HOC 并使用带有children
prop的简单组合
import React, { useState } from 'react';
export default function TinderCard({children}) {
const [isLoading, setIsLoading] = useState(false);
const refresh = () => {
// change state. set isLoading to true and then back to false.
setIsLoading(true);
setIsLoading(false);
};
return (
<div className='card user-card-container'>
<div className='card-body user-card-inner'>
{isLoading ? <h3>Loading...</h3> : children}
<div className='buttons-container'>
<button className='dislike' onClick={() => refresh()}>
<i className='fa fa-times'></i>
</button>
<button className='like' onClick={() => refresh()}>
<i className='fa fa-heart'></i>
</button>
</div>
</div>
</div>
);
}
然后像这样使用它:
<TinderCard>
<SomeFriend/>
</TinderCard>
TA贡献1865条经验 获得超7个赞
https://codesandbox.io/s/react-hooks-usestate-forked-6pqw7
看起来上面的答案提供了问题的部分解决方案,但我只是想指出您的解决方案中可能存在的另一个问题。您的刷新函数调用 setIsLoading 两次。这将导致组件重新渲染,但只会发生一次,并且只会在刷新函数完成执行后发生。您的组件永远不会在状态变量实际为 true 的情况下呈现。此外,与状态变量的 useEffect 挂钩相关的任何效果也不会在刷新时执行。有关如何发生这种情况的示例,请参阅上面的代码沙箱。
添加回答
举报