React js Material UI Switch组件在循环中

时间:2019-04-28 09:59:59

标签: javascript reactjs

我正在尝试制作考勤系统,并且正在使用React材质用户界面中的switch组件(参考:https://material-ui.com/api/switch/)。

如何在循环中循环切换组件,以使每个切换按钮的切换行为类似于每个表行?下面是我的代码块。有帮助吗?目前,当我切换一个开关时,循环内的所有开关都会自动切换。

constructor(props) {
    super(props);
    this.state = {
        checkedB: false,
    }
    this.handleClassChange = this.handleClassChange.bind(this);
}

handleChange = name => event => {
    this.setState({ [name]: event.target.checked });
};

 {

  this.state.students.map((post, i) => (
  <TableRow key={i} className="tblFont">
  <TableCell scope="row">
  {post.ROLLNO}
  </TableCell>
  <TableCell>
  {post.STNAME}
  </TableCell>
  <TableCell>
      <Switch key={this.state[i]}
         checked={this.state.i}
         onChange={this.handleChange('checkedB')}
         value="checkedB"
         color="primary"
      />
  </TableCell>
</TableRow>
    ))
}

1 个答案:

答案 0 :(得分:1)

遍历数组并为每个Switch创建状态。例如{ switch-0: false, switch-1: false, ...}

setDynamicSwitchState = (list) => {

  if (!list) {
    return
  }

  const switchState = {};

  list.forEach((item, index) => {
    switchState['switch-' + index] = false;
  });

  this.setState({
    switchState: switchState
  })
}

在您的handleChange

handleChange = (index, event, checked) => {

  const list = Object.assign({}, this.state.switchState);

  list['switch-' + index] = checked;

  this.setState({
    switchState: list
  })
}

Working Demo