Reactjs 反应数组状态未更新
我想填充数组状态,但投影项在useState中不更新,当我放置投影项时,组件会重新渲染。所以,我使用的是usecallback,但当我将filteredItems和projectItems作为依赖项数组放在usecallback中,将callback放在useState中时,usecallback永远不会运行Reactjs 反应数组状态未更新,reactjs,react-redux,react-hooks,react-router-component,Reactjs,React Redux,React Hooks,React Router Component,我想填充数组状态,但投影项在useState中不更新,当我放置投影项时,组件会重新渲染。所以,我使用的是usecallback,但当我将filteredItems和projectItems作为依赖项数组放在usecallback中,将callback放在useState中时,usecallback永远不会运行 const [filteredItems, setfilteredItems] = useState([]); const [projectItems, setProjectItems]
const [filteredItems, setfilteredItems] = useState([]);
const [projectItems, setProjectItems] = useState([]);
const { projects } = props;
const callback = useCallback(() => {
console.log('callback');
const projectData = projects.map(i => {
return (
{
key: '1',
projectName: i.project_name,
size: i.size,
location: i.location,
status: `Day ${i.Finished_events_days}/${i.total_days_needed}`,
score: `${i.score}/10`,
view: <a>View Project</a>,
download: <a>Download</a>,
feedback: <a>Feedback</a>,
audit: <a>Audit</a>
})
});
setProjectItems(prevState => [...prevState, ...projectData]);
console.log(projectItems);
setfilteredItems([...projectItems]);
}, [projectItems, filteredItems]);
useEffect(() => {
}, [callback]);
const[filteredItems,setfilteredItems]=useState([]);
常量[projectItems,setProjectItems]=useState([]);
const{projects}=props;
const callback=useCallback(()=>{
log('callback');
const projectData=projects.map(i=>{
返回(
{
键:“1”,
项目名称:i.项目名称,
尺寸:i.尺寸,
地点:一,地点,,
状态:`Day${i.Finished\u events\u days}/${i.total\u days\u needed}`,
分数:`${i.score}/10`,
查看:查看项目,
下载:下载,,
反馈:反馈,
审计:审计
})
});
setProjectItems(prevState=>[…prevState,…projectData]);
控制台日志(项目项);
setfilteredItems([…项目项]);
},[projectItems,filteredItems]);
useffect(()=>{
},[callback]);
问题
状态更新是在渲染周期之间处理的,因此尝试记录或使用状态更新只会产生当前渲染周期中的值,而不会产生下一个渲染周期中的值
setProjectItems(prevState => [...prevState, ...projectData]);
console.log(projectItems); // <-- current state!
setfilteredItems([...projectItems]); // <-- current state!
注:
- 除非
实际上被传递给子组件,否则我认为没有必要对其进行记忆回调
- 我不认为
应该是依赖项,因为钩子回调函数会更新它projectItems
不是依赖项,因为它没有在钩子回调中引用filteredItems
useffect
方法更新对数组的更改
useEffect(() => {
setfilteredItems([...projectItems]);
}, [projectItems]);
useffect(()=>{},[callback])代码>-它是干什么用的?您在哪里调用回调?我看到您正试图在状态更新排队的同一渲染周期内记录更新的状态。这回答了你的问题吗?useffect(()=>{callback()}[callback]);但是,另一个问题是,当我在useEffect中将回调作为依赖项传递时,useCallback从不运行,为什么?@deveshuseCallback
hook回调将仅在钩子的依赖项之一更新时调用,其中使用返回的记忆回调是不相关的。如果useCallback
钩子有一个空的依赖项数组,那么它在组件装载时只运行一次。在文档中,useCallback
对于将稳定的回调引用传递给子级非常有用。从代码片段来看,虽然我可能需要更多的上下文,但它似乎不是必需的useCallback
。谢谢,我已经读过了。您能给我一些资源让我更深入地理解它吗。@devesh您指的是useCallback
hook吗?除了钩子的react文档,特别是那个钩子?我不明白为什么会发生useeffect。我问的是关于官方文档之外的钩子资源。
useEffect(() => {
setfilteredItems([...projectItems]);
}, [projectItems]);