【发布时间】:2021-09-29 11:21:53
【问题描述】:
我正在开发一个具有聊天功能的应用程序。当来自新用户的聊天进入时,存储将更新所有聊天的数组,并且该数组将作为道具传递给子组件。每当 chats 数组更新时,子组件都会运行 useEffect 来执行某些功能。我在子组件中有以下代码来检测聊天数组中的更新:
const App = (props: propsData) => {
let [filtered, setFiltered] = useState([])
let [chats, setChats] = useState({active: [], inactive: []})
useEffect(()=>{
const temp: any = {active: [], inactive: []};
props.payload.conversations.forEach((element: any) => {
const status = element.status.toLowerCase(); // element.status can be 'Active' or 'Inactive'
temp[status].push(element);
});
console.log(temp) // prints expected output: {active: [some array], inactive: [some array]}
setChats(temp); // this doesn't set the value to 'chats'
console.log(chats) // prints {active: [], inactive: []}
filterChats(); // function combines together the 'active' and 'inacive' arrays in 'chats'
// object to assign to 'filtered' array.
}, [props.payload.conversations.length])
return(
<div>
{
filtered.map((item: any) => (
<div>
//display item data here
</div>
)
)
</div
)
}
export default App;
我的问题是 setter 函数 setChats(temp) 没有设置 chats 的值,如果我明确地将其分配为 chats=temp 它可以工作,但 setter 方法不起作用。我试过不提供任何默认的favlue,类型转换以及提供默认值,但没有任何效果。
【问题讨论】:
-
你如何使用聊天变量?
-
@Roberto Zvjerković 没什么复杂的。如果我只需要显示活动或非活动聊天,我将
chats.active或chats.inactive分配给filtered。
标签: reactjs typescript react-hooks use-state