【问题标题】:How do I communicate with my stateless component in React?如何在 React 中与我的无状态组件通信?
【发布时间】:2017-07-27 12:00:59
【问题描述】:

我想创建一个包含按钮的非常简单的应用程序。当我单击它时,它应该更改它的名称并且应该将它的状态更改为:isDisabled:true。我通过编写内联按钮、给它一个 OnClick 等等来实现这一点,但是我想尝试使用具有相同功能的无状态组件来实现这一点,但是我完全被卡住了。

import React, { Component } from 'react';
import './App.css';


class App extends Component{
 constructor(){
   super()
   this.state = {name:'Hey buddy click me',
   isDisabled:false,
  }
 }

  render() {
    return (
      <div>
       <MyButton handleClick={this.handleClick.bind(this)}></MyButton>
       </div>
    )
  }
  handleClick = () => {
    this.setState ({
      name:'Dont click!',
      isDisabled:true,
  });

  }
}

const MyButton = (name, isDisabled) => <button onClick={this.handleClick.bind(this)}>{name}</button>

export default App;

【问题讨论】:

  • 我们可以有一个工作的,最小的例子吗?
  • 您正在调用Button 组件中的句柄单击,但尚未传递给您的按钮组件。所以在按钮组件中将无法访问handleClick。

标签: reactjs jsx


【解决方案1】:

如果你想在MyButton 组件中访问,你也需要将name, isDisabledhandleClick 作为道具传递。

虽然 name 也可以作为子级传递。但是我觉得你正在学习开始将它作为道具传递。那么将来你可以使用孩子。

import React, { Component } from 'react';
import './App.css';


class App extends Component{
 constructor(){
   super()
   this.state = {name:'Hey buddy click me',
   isDisabled:false,
  }
 }

  render() {
    return (
      <div>
       <MyButton
         name={this.state.name}
         isDisabled={this.state.isDisabled}
         handleClick={this.handleClick.bind(this)}>
       </MyButton>
      </div>
    )
  }
  handleClick = () => {
    this.setState ({
      name:'Dont click!',
      isDisabled:true,
  });

  }
}
//here we need to receive props from parent components, if we need to use here
const MyButton = ({name, isDisabled, handleClick}) => <button onClick={handleClick}>{name}</button>

export default App;

【讨论】:

  • 所以我需要将 handleClick 方法传递给 MyButton 因为 handleClick 是 App 类的一部分,是吗?
  • 您已经将其传递给handleClick={this.handleClick.bind(this)} MyButton。但在MyButton 中没有正确接收。如果您会看到我上面写的解决方案以及其他预期的道具正确收到。
猜你喜欢
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
相关资源
最近更新 更多