javascript - 只有一种 active 元素

标签 javascript reactjs redux

我有一个 redux 存储,其中存储了 rooms 数组(从服务器获取),在我的组件中,我从存储中获取它,映射它,然后显示值为 room['foo' 的元素] 但我的问题是这样的:当组件被映射并显示时,用户单击的组件的值将被发送到服务器,因此我将单击的元素值存储在组件本地状态中,如下所示:

...
handleRoomSelection(roomNumber,index,e){
    this.setState({
        room: roomNumber
    })
}
...
{this.props.rooms.map((val,i)=>{
   return (
      val.reserved === false ? <p className="" key={i} onClick={e => this.handleRoomSelection(val.roomNumber,i,e)}>{val.roomNumber}</p> : null
   ) 
})}

这工作正常,但我的问题是我想将 className“active”添加到事件元素(只能有一个事件元素),如果可以有许多事件元素(我只需添加 e.target.className = "active" setState 之后)那么我怎样才能实现我的目标呢?

最佳答案

基本上只需按照您所说的操作:根据您所在州的房间号设置类(class)。 setState触发器render() ,因此即使第一次渲染时没有任何事件,只要单击,渲染触发器就可以丰富,我们可以在 map 中设置该类:

render() {
  return this.props.rooms.map(val => {
    if (val.reserved) return null;

    return <p
      className={ this.state.room === val.roomNumber && `active`}
      key={val.roomNubber}
      onClick={() => this.handleRoomSelection(val.roomNumber)}
    >{val.roomNumber}</p>;
  };
}

请注意,我们已经更改了 key到唯一标识我们正在构建的元素的东西 <p> for:永远不要使用数组索引作为键,因为数组位置不标识任何特定的元素,它仅标识列表中的位置

另请注意,如果处理程序本身只关心房间号,则没有理由在点击处理程序中仅传递房间号。

关于javascript - 只有一种 active 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58436875/

相关文章:

javascript - 如果包裹在自执行的匿名函数中,JavaScript 可以是 "unit testable"

javascript - Konva.js - 如何获取组中对象的位置(在其层内测量)?

reactjs - 将规范化器与 ReduxForm 一起使用会导致表单始终脏乱

javascript - 为什么使用 immutableJS 我的状态没有改变?

javascript - 如何在 Redux 中只更新 reducer 的一个值?

javascript - 如何从数组 1 中删除项目并将项目推送到数组 2

javascript - 在Polymer回调中设置数组项属性值

javascript - React/react-router 重定向到一组 URL?

reactjs - 在 jasmine 助手中调用 Enzyme.configure

javascript - 为什么我没有在 react 中获得更新的 Prop 值(value)