2015-11-21 30 views
17

Tôi mới để phản ứng trên thế giới và tôi có dòng như sau:onClick không hiển thị thành phần phản hồi mới.

<Button onClick={() => console.log("hello")}>Button</Button> 

và nhấp chuột, bạn sẽ nhận được hello in trên console. Bây giờ có sự thay đổi để:

<Button onClick={() => <NewComponent />}>Button</Button> 

bây giờ nhấp chuột vào nút, tôi hy vọng các NewComponent để được trả lại. Nhưng nó không.

Tôi không chắc chắn, tại sao lại như vậy. Lưu ý rằng tôi có mã ở trên trong phương thức render.

+0

Đó chỉ là không phải là cách nó hoạt động. Bạn mong đợi thành phần sẽ hiển thị ở đâu? –

+0

trên cùng một trang. – batman

+0

Nhưng ở đâu? Phía trên nút? Bên dưới nút? Bên trong nút? * Bên trong thuộc tính 'onClick'? * Một nơi khác? Hiện tại, trình xử lý nhấp chuột của bạn là một cái gì đó như 'function() {React.createElement (...); } '. Nó không làm bất cứ điều gì với các yếu tố đã được tạo ra. –

Trả lời

31

Bạn có thể muốn có thành phần trạng thái hiển thị thành phần khác bên cạnh nút sau khi được nhấp. Tất cả những gì bạn cần làm là theo dõi xem nút có được nhấp hay không:

class MyComponent extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     showComponent: false, 
    }; 
    this._onButtonClick = this._onButtonClick.bind(this); 
    } 

    _onButtonClick() { 
    this.setState({ 
     showComponent: true, 
    }); 
    } 

    render() { 
    return (
     <div> 
     <Button onClick={this._onButtonClick}>Button</Button> 
     {this.state.showComponent ? 
      <NewComponent /> : 
      null 
     } 
     </div> 
    ); 
    } 
} 
+0

Hi.what nếu tôi muốn tải chỉ NewComponent trên cùng một trang ghi đè tất cả các các thành phần khác mà không sử dụng bộ định tuyến phản ứng? –

2

Đây là một số CodePen để hiển thị hoạt động.

HTML

<div id="root">loading...</div> 

JSX

class NewComponent extends React.Component { 
    render() { 
    return (
     <div {...this.props}> 
     new component 
     </div> 
    ); 
    } 
} 

class Button extends React.Component { 
    render() { 
    return (
     <button {...this.props}> 
     click 
     </button> 
    ); 
    } 
} 

class App extends React.Component { 
    constructor() { 
    super(); 

    this.state = { 
     clicked: false 
    }; 

    this.handleClick = this.handleClick.bind(this); 
    } 

    handleClick() { 
    this.setState({ 
     clicked: true 
    }); 
    } 

    render() { 
    return (
     <div> 
     <Button onClick={this.handleClick} /> 
     {this.state.clicked ? <NewComponent /> : null} 
     </div> 
    ); 
    } 
}; 

React.render(
    <App />, 
    document.getElementById("root") 
); 
+0

Một cây bút không bao giờ giúp ích được gì nhiều. Tôi bắt đầu nhận được vấn đề hiển thị có điều kiện về React :) cảm ơn! –

Các vấn đề liên quan