2017-07-27 74 views
0

我想创建一个非常简单的应用程序,其中包含一个按钮。当我点击它时,它应该改变它的名字,并且应该将其状态更改为:isDisabled:true。我通过编写内联按钮,给它一个OnClick等来实现这一点,但我想用无状态的组件来实现它,但是我完全被卡住了。如何与React中的无状态组件进行通信?

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; 
+0

我们可以有一个工作,最小的例子吗? –

+0

你正在调用句柄点击'Button'组件,但是这没有传递给你的按钮组件。所以handleClick在按钮组件中不可访问。 –

回答

0

您需要与​​通过name, isDisabled过的道具,如果你想获得再MyButton组件。

虽然名字也可以作为孩子传递。但是,当我觉得你正在学习开始传递它作为道具。然后在将来你可以使用孩子。

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; 
+0

所以我需要传递一个handleClick方法到MyButton,因为handleClick是App类的一部分,是吗? –

+0

你已经把它传递给'handleClick = {this.handleClick.bind(this)}'MyButton。但在MyButton中没有正确接收。如果你会看到我上面写的解决方案只是收到适当的其他预期道具。 –

相关问题