【发布时间】:2020-07-20 17:37:54
【问题描述】:
我有两个子组件更新父组件的相同状态。两个子组件都包含一个循环,循环的每个元素都会在点击事件时更新状态。
父组件:-
const [selected, setSelected] = useState('')
const selectContact = (e: SyntheticEvent<HTMLDivElement>) => {
const {id} = e.currentTarget
setSelected(id)
console.log(id)
}
<ChannelList selected={selected} setSelected={selectContact}
....other props />
<FriendList selected={selected} setSelected={selectContact} ......other props />}
我显然没有包含整个组件。
ChannelList 组件:-
{channels.map(channel =>
<div key={channel.id}>
<div id={channel.id}
className={`channel-list ${selected === channel.id && 'selected-channel'}`}
onClick={(e) => {
setSelected(e)
channelDetails(channel.id)
}}
// .....rest of my code
<div>
}
FriendList 组件:-
{friends.map(friend =>
<div key={friend.id} id={friend.id}
className={`friend-list-item ${selected === friend.id && 'selected-user'}`}
onClick={(e) => setSelected(e)}>
//.......the rest
<div>
}
我想做的是根据状态改变样式。如果我单击同一组件中的不同项目,则状态会更新并且 CSS 会正常呈现。但是,如果我单击另一个组件上的任何内容,尽管状态会更新,但 CSS 样式会保留在两个组件上。
this is the what happens that i don't want
我想要的是样式应该只呈现在其中一个组件上。 我正在使用 react hooks 和 Typescript。
换句话说,如果我点击一个朋友的名字,选择的频道应该被取消选择,反之亦然。
任何帮助将不胜感激。
【问题讨论】:
-
嘿,@Ashki80。是否可以创建codesandbox?
-
我会试试的。但是想象一下。父组件已获得状态。当子 B 更新状态时,虽然子 B 更新,但子 A 不更新(反之亦然)
标签: reactjs