Javascript 使用键唯一标识每个元素,并在ReactJS中更改该元素的道具
我有JSON数组中的JSON对象列表。其中每个元素都用键唯一标识 JSON对象包含: 事件名称 日期和时间 我只想为特定于事件的显示麦克风的开关。 目前正在发生的是,我在JSON对象的每个事件上显示mic on和mic off,而不是单击的对象。而仅限于唯一键Javascript 使用键唯一标识每个元素,并在ReactJS中更改该元素的道具,javascript,reactjs,Javascript,Reactjs,我有JSON数组中的JSON对象列表。其中每个元素都用键唯一标识 JSON对象包含: 事件名称 日期和时间 我只想为特定于事件的显示麦克风的开关。 目前正在发生的是,我在JSON对象的每个事件上显示mic on和mic off,而不是单击的对象。而仅限于唯一键 我知道一个问题,即mic状态是全局声明的,并且是所有人的状态。但是,我是否可以将事件名称附加到麦克风状态以使其唯一。您可以使用状态属性来保持每个单独的事件的开/关位置,而不是保持一个通用位置 类应用程序扩展了React.Componen
我知道一个问题,即mic状态是全局声明的,并且是所有人的状态。但是,我是否可以将事件名称附加到麦克风状态以使其唯一。您可以使用状态属性来保持每个单独的
事件的开/关位置,而不是保持一个通用位置
类应用程序扩展了React.Component{
状态={
密歇根州:{}
};
handleMicState=id=>
this.setState(当前=>({
micStates:{…current.micStates[id]:!current.micStates[id]}
}));
render(){
返回(
{this.props.events.map(event=>(
{event.event_name}
{this.state.micStates[event.id](
this.handleMicState(event.id)}>
在{“}
) : (
this.handleMicState(event.id)}>
关闭{”“}
)}
- {event.date\u time}
))}
);
}
}
常量事件=[
{id:1,事件名称:“foo”,日期时间:12345},
{id:2,事件名称:“bar”,日期时间:67890},
{id:3,事件名称:“baz”,日期时间:12345}
];
render(,document.getElementById(“根”))代码>
您可以使用状态属性来保持每个单独的事件的开/关位置,而不是保持一个通用位置
类应用程序扩展了React.Component{
状态={
密歇根州:{}
};
handleMicState=id=>
this.setState(当前=>({
micStates:{…current.micStates[id]:!current.micStates[id]}
}));
render(){
返回(
{this.props.events.map(event=>(
{event.event_name}
{this.state.micStates[event.id](
this.handleMicState(event.id)}>
在{“}
) : (
this.handleMicState(event.id)}>
关闭{”“}
)}
- {event.date\u time}
))}
);
}
}
常量事件=[
{id:1,事件名称:“foo”,日期时间:12345},
{id:2,事件名称:“bar”,日期时间:67890},
{id:3,事件名称:“baz”,日期时间:12345}
];
render(,document.getElementById(“根”))代码>
您也可以使用此解决方案,希望这对您有所帮助
constructor(props) {
super(props);
this.state = {
mics :{},
}
}
handleMics = name =>{
let {mics}=this.state;
mics[name]=mics[name]? false : true;
this.setState({ mics });
}
{this.props.events.map((event) =>
(
<div key={event.event_name}>
<ul>
<div><h4>{event.event_name}</h4>
<div> //ternary operation next line
{this.state.mics[event.event_name]?
<span onClick={()=>this.handleMics(event.event_name)}>
<MicOn />
</span> :
<span onClick={()=>this.handleMics(event.event_name)}>
<MicOff />
</span>}
</div>
</div>
<li>{event.date_time}</li></ul>
</div>
))
}
构造函数(道具){
超级(道具);
此.state={
中等收入国家:{},
}
}
handleMics=name=>{
设{mics}=this.state;
mics[name]=mics[name]?false:true;
这个.setState({mics});
}
{this.props.events.map((event)=>
(
{event.event_name}
//下一行三值运算
{this.state.mics[event.event_name]?
this.handleMics(event.event_name)}>
:
this.handleMics(event.event_name)}>
}
- {event.date\u time}
))
}
您也可以使用此解决方案,希望这对您有所帮助
constructor(props) {
super(props);
this.state = {
mics :{},
}
}
handleMics = name =>{
let {mics}=this.state;
mics[name]=mics[name]? false : true;
this.setState({ mics });
}
{this.props.events.map((event) =>
(
<div key={event.event_name}>
<ul>
<div><h4>{event.event_name}</h4>
<div> //ternary operation next line
{this.state.mics[event.event_name]?
<span onClick={()=>this.handleMics(event.event_name)}>
<MicOn />
</span> :
<span onClick={()=>this.handleMics(event.event_name)}>
<MicOff />
</span>}
</div>
</div>
<li>{event.date_time}</li></ul>
</div>
))
}
构造函数(道具){
超级(道具);
此.state={
中等收入国家:{},
}
}
handleMics=name=>{
设{mics}=this.state;
mics[name]=mics[name]?false:true;
这个.setState({mics});
}
{this.props.events.map((event)=>
(
{event.event_name}
//下一行三值运算
{this.state.mics[event.event_name]?
this.handleMics(event.event_name)}>
:
this.handleMics(event.event_name)}>
}
- {event.date\u time}
))
}
如果在全局状态对象的“mic”属性旁边添加一个以上的属性,是否有用。state={mic:false,事件:“”然后,您可以使用传递给click handlers的名称设置this.state.event,并在html端检查this.state.mic&&this.state.event==event.name?如果您在全局状态对象的“mic”属性旁边添加一个属性,例如这样的属性,是否有用。state={mic false,event:'}然后,您可以使用传递给click handlers的名称设置this.state.event,并在html端检查this.state.mic&&this.state.event==event.name?此行的作用是什么this.setState(current=>({micStates:{…current.micStates,[id]:!current.micStates[id]}))
?@Plootus,我添加了一些解释。你能告诉我什么是当前的吗?还有当前…当前之前的三个点。micStates
当前
只是当前状态的一个名称。你可以用任何名字。点点滴滴散开
constructor(props) {
super(props);
this.state = {
mics :{},
}
}
handleMics = name =>{
let {mics}=this.state;
mics[name]=mics[name]? false : true;
this.setState({ mics });
}
{this.props.events.map((event) =>
(
<div key={event.event_name}>
<ul>
<div><h4>{event.event_name}</h4>
<div> //ternary operation next line
{this.state.mics[event.event_name]?
<span onClick={()=>this.handleMics(event.event_name)}>
<MicOn />
</span> :
<span onClick={()=>this.handleMics(event.event_name)}>
<MicOff />
</span>}
</div>
</div>
<li>{event.date_time}</li></ul>
</div>
))
}