React UseState 在渲染后解析当前值
React UseState resolve current value after rendering
渲染后,我正在为 useState const 获取当前赋值。我已经在 useEffect 中初始化了 const 值,但仍然无法获得结果。
我在捕获事件的位置有下拉菜单并为 useState 设置新值,然后调用 API 获取数据。我希望当前数据尽快使用 useState 我更改下拉列表中的值?
我遵循了这个答案,但没有得到任何结果,不确定我从这个谜题中遗漏了什么?
const XYZ = () => {
const [siteCoverStatus, setSiteCoverStatus] = useState("ALL");
useEffect(() =>{
setDefaultSearchCriteria();
},[setSiteCoverStatus, setEziSearchCriteria]);
const handleCoverStatusFilter = (event) =>{
if(event!=null){
setSiteCoverStatus(event.value)
console.log("cover status new val ==", event.value );
console.log("cover status siteCoverStatus ==", siteCoverStatus);
handleSearchCriteriaUpdate();
}
}
const handleSearchCriteriaUpdate = () =>{
var criteria : IEziStatusSearchCriteriaForm = {
startTime: startDate.toLocaleDateString(),
endTime: endDate.toLocaleDateString(),
schedAction_Active: recordSchedAction,
isActive: siteActiveStatus,
queryKeyword: search,
coverStatus: siteCoverStatus,
siteId: fiteredSiteId,
managerId: filteredManagerId
}
setEziSearchCriteria(criteria);
var keyValue = criteria.startTime+criteria.endTime+criteria.schedAction_Active+criteria.isActive+criteria.coverStatus+criteria.queryKeyword+criteria.siteId+criteria.managerId;
setAppSwtichKey(keyValue);
}
<div className= "input-child-block input-block">
<Select
options={eziSitesStatusCovers}
onChange = {handleCoverStatusFilter}
isClearable={true}
placeholder={siteCoverStatus}
/>
</div>
由于 handleSearchCriteria 取决于更新状态 siteCoverStatus
,您可以在 useEffect
中调用它,依赖性为 siteCoverStatus
。
此外,由于您希望在所有处理完成后清除 searchCriteria,因此您可以在更新 eziSearchCriteria 后执行此操作。
const XYZ = () => {
const [siteCoverStatus, setSiteCoverStatus] = useState("ALL");
useEffect(() =>{
setDefaultSearchCriteria();
},[eziSearchCriteria]);
useEffect(() => {
if(siteCoverStatus) {
handleSearchCriteriaUpdate();
}
}, [siteCoverStatus])
const handleCoverStatusFilter = (event) =>{
if(event!=null){
setSiteCoverStatus(event.value)
}
}
const handleSearchCriteriaUpdate = () =>{
var criteria : IEziStatusSearchCriteriaForm = {
startTime: startDate.toLocaleDateString(),
endTime: endDate.toLocaleDateString(),
schedAction_Active: recordSchedAction,
isActive: siteActiveStatus,
queryKeyword: search,
coverStatus: siteCoverStatus,
siteId: fiteredSiteId,
managerId: filteredManagerId
}
setEziSearchCriteria(criteria);
var keyValue = criteria.startTime+criteria.endTime+criteria.schedAction_Active+criteria.isActive+criteria.coverStatus+criteria.queryKeyword+criteria.siteId+criteria.managerId;
setAppSwtichKey(keyValue);
}
<div className= "input-child-block input-block">
<Select
options={eziSitesStatusCovers}
onChange = {handleCoverStatusFilter}
isClearable={true}
placeholder={siteCoverStatus}
/>
</div>
渲染后,我正在为 useState const 获取当前赋值。我已经在 useEffect 中初始化了 const 值,但仍然无法获得结果。
我在捕获事件的位置有下拉菜单并为 useState 设置新值,然后调用 API 获取数据。我希望当前数据尽快使用 useState 我更改下拉列表中的值?
我遵循了这个答案
const XYZ = () => {
const [siteCoverStatus, setSiteCoverStatus] = useState("ALL");
useEffect(() =>{
setDefaultSearchCriteria();
},[setSiteCoverStatus, setEziSearchCriteria]);
const handleCoverStatusFilter = (event) =>{
if(event!=null){
setSiteCoverStatus(event.value)
console.log("cover status new val ==", event.value );
console.log("cover status siteCoverStatus ==", siteCoverStatus);
handleSearchCriteriaUpdate();
}
}
const handleSearchCriteriaUpdate = () =>{
var criteria : IEziStatusSearchCriteriaForm = {
startTime: startDate.toLocaleDateString(),
endTime: endDate.toLocaleDateString(),
schedAction_Active: recordSchedAction,
isActive: siteActiveStatus,
queryKeyword: search,
coverStatus: siteCoverStatus,
siteId: fiteredSiteId,
managerId: filteredManagerId
}
setEziSearchCriteria(criteria);
var keyValue = criteria.startTime+criteria.endTime+criteria.schedAction_Active+criteria.isActive+criteria.coverStatus+criteria.queryKeyword+criteria.siteId+criteria.managerId;
setAppSwtichKey(keyValue);
}
<div className= "input-child-block input-block">
<Select
options={eziSitesStatusCovers}
onChange = {handleCoverStatusFilter}
isClearable={true}
placeholder={siteCoverStatus}
/>
</div>
由于 handleSearchCriteria 取决于更新状态 siteCoverStatus
,您可以在 useEffect
中调用它,依赖性为 siteCoverStatus
。
此外,由于您希望在所有处理完成后清除 searchCriteria,因此您可以在更新 eziSearchCriteria 后执行此操作。
const XYZ = () => {
const [siteCoverStatus, setSiteCoverStatus] = useState("ALL");
useEffect(() =>{
setDefaultSearchCriteria();
},[eziSearchCriteria]);
useEffect(() => {
if(siteCoverStatus) {
handleSearchCriteriaUpdate();
}
}, [siteCoverStatus])
const handleCoverStatusFilter = (event) =>{
if(event!=null){
setSiteCoverStatus(event.value)
}
}
const handleSearchCriteriaUpdate = () =>{
var criteria : IEziStatusSearchCriteriaForm = {
startTime: startDate.toLocaleDateString(),
endTime: endDate.toLocaleDateString(),
schedAction_Active: recordSchedAction,
isActive: siteActiveStatus,
queryKeyword: search,
coverStatus: siteCoverStatus,
siteId: fiteredSiteId,
managerId: filteredManagerId
}
setEziSearchCriteria(criteria);
var keyValue = criteria.startTime+criteria.endTime+criteria.schedAction_Active+criteria.isActive+criteria.coverStatus+criteria.queryKeyword+criteria.siteId+criteria.managerId;
setAppSwtichKey(keyValue);
}
<div className= "input-child-block input-block">
<Select
options={eziSitesStatusCovers}
onChange = {handleCoverStatusFilter}
isClearable={true}
placeholder={siteCoverStatus}
/>
</div>