【发布时间】:2020-09-29 13:36:04
【问题描述】:
我正在尝试通过在我的<Link> 中触发 onClick 事件来更新我的状态,但只有在我单击它两次之后,输出才会出现在我的控制台中,我尝试在 stackoverflow 中阅读与此类似的其他问题,但仍然找不到解决方案,谁能告诉我我做了什么?你的帮助会很棒
import React,{useState} from 'react';
import { BrowserRouter as Router, Link } from 'react-router-dom';
const [search, setSearch] = useState("");
const [keyword, setKeyword] = useState("");
const handleChange = (e) =>{
setSearch(e.target.value);
console.log(search);
};
const handleClick = () => {
setKeyword(search);
setSearch('');
console.log(keyword);
};
return(
<div>
<input onChange={handleChange} value={search} placeholder="Search songs, artist, albums"/>
<Link onClick = {handleClick} to={`/songlist/${keyword}`}>Search</Link>
</div>
)
【问题讨论】:
-
所以我需要在 setState 中传递一个回调函数才能让它立即工作?
-
它给了我这个错误 ** 警告:来自 useState() 和 useReducer() Hooks 的状态更新不支持第二个回调参数。要在渲染后执行副作用,请在组件主体中使用 useEffect()** 声明它。
-
没错,你需要使用
React.useEffect(() => { console.log(search); }, [search]);(我也建议不要使用钩子作为react初学者) -
因为 JS 是异步的。你可以使用
useEffect钩子来处理效果。
标签: javascript reactjs