reactjs - React 中的 props 是未定义的

标签 reactjs react-props reactstrap

我是 jsreactjs 的新手。我正在尝试创建一个里面有几个 ButtonButtonGroup ,希望当我单击特定的 Button 时(在 ButtonGroup)只有特定按钮会突出显示(改变颜色),其余按钮将是正常颜色。 下面是执行上述行为的代码,但在 setColour 方法中,我收到错误 _this.state.selected.props is undefined。有人可以指出我错在哪里吗?另外,如果有人可以告诉我这是否是解决这个问题的正确方法。

import React from "react"
import {
    ButtonGroup,
    Button
} from "reactstrap"


class MainButtonsGroup extends React.Component {
constructor (props) {
    super(props)
    this.state = {
        selected: null
    }
}

handleSelection = (e) => {
    this.setState({selected: e.target})
}

setColour = (key) => {
    if (this.state.selected)
    {
        // ERROR : _this.state.selected.props is undefined
        return (this.state.selected.props.key === key) ? 'primary' : 'secondary'
    }
}

render() {
    return (
        <ButtonGroup>
            <Button key={1} onClick={this.handleSelection} color={this.setColour(1)}>MainButtonA</Button>
            <Button key={2} onClick={this.handleSelection} color={this.setColour(2)}>MainButtonB</Button>
            <Button key={3} onClick={this.handleSelection} color={this.setColour(3)}>MainButtonC</Button>
        </ButtonGroup>
    )
}
}

export default MainButtonsGroup;

最佳答案

您不应该保留 e.target 引用,并且您的控制台中一定会收到有关它的 React 警告?您刚刚在应用程序中造成了内存泄漏。

而是从目标中复制您需要的内容,并让引用被垃圾收集。尽管在您的情况下不需要将数据附加到 DOM 节点:

<Button onClick={() => this.handleSelection(this.setColour(3))}>MainButtonC</Button>

请注意,除非您在循环中映射元素,否则不需要 key={3}

handleSelection = (color) => {
    this.setState({ selected: color })
}

但是这段代码有点奇怪,只需记录单击按钮的索引并给它一个类来设置样式,例如

class MainButtonsGroup extends React.Component {
  state = {
    selectedIndex: null,
  }

  handleSelection = (index) => {
    this.setState({selectedIndex: index})
  }

  render() {
    const idx = this.state.selectedIndex;

    return (
      <ButtonGroup>
        <Button className={idx === 1 ? 'primary' : 'secondary'} onClick={() => this.handleSelection(1)}>MainButtonA</Button>
        <Button className={idx === 2 ? 'primary' : 'secondary'} onClick={() => this.handleSelection(2)}>MainButtonB</Button>
        <Button className={idx === 3 ? 'primary' : 'secondary'} onClick={() => this.handleSelection(3)}>MainButtonC</Button>
      </ButtonGroup>
    );
  }
}

关于reactjs - React 中的 props 是未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709487/

相关文章:

javascript - 在用 Jest 测试之前等待 React 组件状态更新

javascript - 如何在平板设备上获取经度和纬度? JS map 框

reactjs - 将 props 传递给 componentDidMount

html - Reactjs - 调整大小时订购div

javascript - react .js : Why delete button is not working?

reactjs - Material -UI : DataGrid/XGrid How to detect density change?

javascript - React Bootstrap 下拉项不会在状态更改时更新

javascript - React.js 将 prop 状态从兄弟转移到另一个兄弟?

javascript - 在 React js 中使用 Reactstrap 从多个选择下拉列表中动态选择选项

bootstrap-4 - 页面右下角的 Bootstrap Toast