1. 程式人生 > 其它 >React學習(三)-元件使用

React學習(三)-元件使用

一.元件

  React可以將模組拆分為多個元件,用分而治之的思想,讓各個元件專注於實現某個功能。在設計上,符合高內聚、低耦合原則。高內聚是元件內部實現自己的邏輯,像展示頁面的jsx,定義行為的js,甚至是樣式css。低耦合是,各個元件相互依賴關係要弱化,每個元件儘量獨立。

二.元件互動

  定義一個Home元件。

var React = require('react');

class Home extends React.Component {
    constructor(props) {
        super(props);
        //定義資料
        this
.state = { text: "this is home" }; } render() { return <div> {this.state.text} </div>; } } export default Home;

  在其它元件中引用Home元件。

var React = require('react');
import Home from './component/Home.jsx'

class App extends React.Component {
    constructor() {
        super();
        
//定義資料 this.state = { text: "hello world" }; } render() { return <div> <Home></Home> </div>; } } export default App;

  這樣子輸出頁面就可以看到Home元件的內容。那元件間該如何通訊?這裡就講用props的方式。

  元件有state和props兩種狀態值,state是內部值,props是外部傳進來的值。

//引用Home元件
render() {
    return <div>
        <Home text="byebye world"></Home>
    </div>;
}

class Home extends React.Component {
    constructor(props) {
        super(props);
        //定義資料
        this.state = {
            text: this.props.text
        };
    }

    render() {
        return <div>
            {this.state.text}
        </div>;
    }
}

  在引用Home元件時,在Home標籤上帶上屬性來傳值,在Home元件內的建構函式接收到this上。

  父元件通過props將值傳給子元件。而子元件想將值傳給父元件,則需要父元件通過props將自己的函式傳給子元件,由子元件呼叫父元件的函式。

//父元件
class
App extends React.Component { constructor() { super(); //定義資料 this.state = { text: "hello world", count: 0 }; } handleClick(count) { this.setState({ count: count }); } render() { return <div> 父元件:{this.state.count} <Home text="byebye world" click={this.handleClick.bind(this)} count={this.state.count}></Home> </div>; } }
//子元件
class Home extends React.Component { constructor(props) { super(props); //定義資料 this.state = { text: this.props.text, count: this.props.count }; } handleClick(e) { var count = this.state.count + 1; this.setState({count:count}); this.props.click(count); //注意這種寫法會有延遲,因為setState方法在這裡是非同步的,count值還是0。或者改用setState的回撥方法 // this.setState({ // count: this.state.count + 1 // }); // this.props.click(this.state.count); } render() { return <div> {this.state.text} 子元件:{this.state.count} <input type="button" onClick={this.handleClick.bind(this)} /> </div>; } }

  這裡實現了修改子元件數值,然後將子元件得數值傳給父元件輸出。