Mat*_*att 5 reactjs react-hooks use-effect use-state
我有一个简单的组件,可以将链接复制到剪贴板,并且想用复选标记交换链接图标。我有这样做的逻辑设置,但是在 3 秒后重置状态以将按钮重置回链接图标时遇到问题。如何正确设置我的useEffect和状态钩子以设置然后重置状态以显示/隐藏选中标记的链接并再次返回?
const [copySuccess, setCopySuccess] = useState('');
const [visible, setVisible] = useState(true);
const copyToClipBoard = async copyHeader => {
try {
await navigator.clipboard.writeText(copyHeader);
setCopySuccess('Copied!');
} catch (err) {
setCopySuccess('Failed to copy!');
}
};
<Button>
{copySuccess ? (
<Icon name="success" />
):(
<Icon
name="linked"
onClick={() => copyToClipBoard(url)}
/>
)}
</Button>
Run Code Online (Sandbox Code Playgroud)
我正在尝试useEffect这样的:
useEffect(() => {
setTimeout(() => {
setVisible(false);
}, 3000);
});
Run Code Online (Sandbox Code Playgroud)
但不确定如何使用setVisible状态和超时,将图标交换回链接,让用户知道他们可以再次复制它。
您可以从 state 派生可见状态copySuccess,尝试将其添加到useEffectdep 数组:
const [copySuccess, setCopySuccess] = useState("");
const copyToClipBoard = async (copyHeader) => {
try {
await navigator.clipboard.writeText(copyHeader);
setCopySuccess("Copied!");
} catch (err) {
setCopySuccess("Failed to copy!");
}
};
useEffect(() => {
if (copySuccess !== "") {
setTimeout(() => {
setCopySuccess("");
}, 3000);
}
}, [copySuccess]);
<Button>
{copySuccess ? (
<Icon name="success" />
) : (
<Icon name="linked" onClick={() => copyToClipBoard(url)} />
)}
</Button>;
Run Code Online (Sandbox Code Playgroud)
请参阅codesandbox示例中的类似逻辑:
function Component() {
const [copyIsAvailable, setCopyIsAvailable] = useState(true);
useEffect(() => {
setTimeout(() => {
setCopyIsAvailable(true);
}, 1000);
}, [copyIsAvailable]);
return (
<button onClick={() => setCopyIsAvailable(false)}>
{copyIsAvailable ? "copy" : "copied"}
</button>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |