javascript - 单击按钮时显示 2 个组件中的 1 个

标签 javascript arrays reactjs if-statement onclick

在父组件上,我试图做2个按钮,每个按钮都会显示一个组件,第一个按钮显示itemlist,第二个组件显示itemlist2,但我似乎无法正确执行,我尝试遵循这个例如( https://codepen.io/PiotrBerebecki/pen/yaVaLK ),尽管我不确定它是否适合此类功能,但这是我的 app.js 代码

  class App extends Component {
  state = {
    one: false
  };

  handleClick(e) {
    const userChoice = e.target.className;
    this.setState({
      userChoice
    });
  }

  toggleDiv() {
    this.setState({
      one: !this.state.one
    });
  }

  toggleDiv1() {
    this.setState({
      one: this.state.one
    });
  }

  render() {
    return (
      <div>
        <NavBar />
        <div className="container-fluid">
          <ServiceSelector toggleDiv={this.toggleDiv.bind(this)} toggleDiv1= 
          {this.toggleDiv1.bind(this)} />
          {this.state.one == false ? <ItemList /> : <ItemList2 />}
        </div>
      </div>
    );
  }
}

class ServiceSelector extends React.Component {
  toggleDiv() {
    this.props.toggleDiv();
  }
  toggleDiv2() {
    this.props.toggleDiv2();
  }

  render() {
    return (
      <div>
        {" "}
        <button onClick={this.toggleDiv.bind(this)}>sss </button>
        <button onClick={this.toggleDiv1.bind(this)}>sss </button>
      </div>
    );
  }
}

最佳答案

其实就是这个函数

toggleDiv1() {
  this.setState({
    one: this.state.one
  });
}

没用。

切换功能应该有一个

toggleFunc() {
  this.setState({stateWatched = !this.state.stateWatched})
}

在两种情况下都使用此函数(设置truefalse)。并且在ServiceSelector组件中调用时不要bind,这是无意义的。

class App extends Component {
  state = {
    one: false
  };

  handleClick(e) {
    const userChoice = e.target.className;
    this.setState({
      userChoice
    });
  }

  toggleDiv() {
    this.setState({
      one: !this.state.one
    });
  }

  render() {
    return (
      <div>
        <NavBar />
        <div className="container-fluid">
          <ServiceSelector toggleDiv={this.toggleDiv.bind(this)} />
          {this.state.one == false ? <ItemList /> : <ItemList2 />}
        </div>
      </div>
    );
  }
}

class ServiceSelector extends React.Component {
  render() {
    return (
      <div>
        {" "}
        <button onClick={this.props.toggleDiv}>sss </button>
      </div>
    );
  }
}

如果你想有 2 个按钮来处理切换。更改函数的逻辑。

function toggleTrue() {
  this.setState({one: true})
}

function toggleFalse() {
  this.setState({one: false})
}

然后像平常一样传递它(记住删除子组件中的 bind 函数)

关于javascript - 单击按钮时显示 2 个组件中的 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975909/

相关文章:

javascript - react .js : Parent state values not passing into child properties + Fetch API data cannot be accessed

javascript - 如何从 URL 获取 JSON 对象

javascript - 如何在 Jquery Chosen 插件中搜索乌尔都语?还有其他方法可以在 Selectbox 中搜索乌尔都语吗?

ios - 据说通过编辑副本将被污染的 NSArray 分开

arrays - 如何在 ruby​​ 中返回相交数组并保留大写/小写?

node.js - 带有 Node 模块/ react 的图像编辑器

javascript - 无需在d3.js中使用selectAll即可忽略第一个数据

javascript - 通过Xpath在另一个元素中查找一个元素

arrays - Ruby 1.8.6 Array#uniq 不删除重复的哈希

javascript - 未捕获的 TypeError : Cannot set property 'onclick' of null , 无法打开我的弹出窗口