zoukankan      html  css  js  c++  java
  • React和Vue组件间数据传递demo

    一、React

    (一)父组件向子组件传数据

    1. 简单的向下传递参数
    /* Parent */
    class App extends Component {
      render() {
        return (
          <div className="App">
            <Child msg="来自父元素的问候"/>
          </div>
        );
      }
    }
    
    /* Child */
    class Child extends Component {
      render() {
        return <div>{this.props.msg}</div>;
      }
    }
    

    在CodeSandbox中打开

    1. 向更下一级传递参数
    /* Child1 */
    class Child1 extends Component {
      render() {
        return (
          <div>
            <h3>Child1</h3>
            <p>{this.props.msg}</p>
            <Child1_Child1 {...this.props} />
          </div>
        );
      }
    }
    
    /* Child1_Child1 */
    class Child1_Child1 extends Component {
      render() {
        return (
          <div>
            <h3>Child1_Child1</h3>
            <p>{this.props.msg}</p>
          </div>
        );
      }
    }
    

    在CodeSandbox中打开

    (二)子组件向父组件传递参数

    /* Parent */
    class App extends Component {
      constructor() {
        super();
        this.state = {
          msg: "this is parent msg"
        };
      }
    
      changeMsg(msg) {
        this.setState({ msg });
      }
    
      render() {
        return (
          <div className="App">
            <h3>parent</h3>
            <p>{this.state.msg}</p>
            <Child1
              changeMsg={msg => {
                this.changeMsg(msg);
              }}
              msg={this.state.msg}
            />
          </div>
        );
      }
    }
    
    /* Child1 */
    class Child1 extends Component {
      componentDidMount() {
        setTimeout(() => {
          this.props.changeMsg("This child change msg");
        }, 1000);
      }
    
      render() {
        return (
          <div>
            <h3>Child1</h3>
            <p>{this.props.msg}</p>
          </div>
        );
      }
    }
    

    在CodeSandbox中打开

    (三)兄弟组件传递参数

    /* Parent */
    class App extends Component {
      constructor() {
        super();
        this.state = {
          msg: "this is parent msg"
        };
      }
    
      changeMsg(msg) {
        this.setState({ msg });
      }
    
      render() {
        return (
          <div className="App">
            <h3>parent</h3>
            <p>{this.state.msg}</p>
            <Child1
              changeMsg={msg => {
                this.changeMsg(msg);
              }}
              msg={this.state.msg}
            />
            <Child1
              msg={this.state.msg}
            />
          </div>
        );
      }
    }
    
    /* Child1 */
    class Child1 extends Component {
      componentDidMount() {
        setTimeout(() => {
          this.props.changeMsg("This child change msg");
        }, 1000);
      }
    
      render() {
        return (
          <div>
            <h3>Child1</h3>
            <p>{this.props.msg}</p>
          </div>
        );
      }
    }
    
    /* Child2 */
    class Child2 extends Component {
      render() {
        return (
          <div>
            <h3>Child2</h3>
            <p>{this.props.msg}</p>
          </div>
        );
      }
    }
    

    二、Vue

    (一)父组件向子组件传数据

    1. 简单的向下传递参数
    /* Parent */
    <div id="app">
      <Child msg='ni daye'/>
    </div>
    
    /* Child1 */
    <template>
      <div class="hello">
        <p>{{ msg }}</p>
      </div>
    </template>
    <script>
    export default {
      name: "HelloWorld",
      props: {
        msg: String
      }
      // somecomde
    };
    </script>
    

    在CodeSandbox中打开

    1. 向更下一级传递参数
    /* Child1 */
    <template>
      <div class="hello">
        <p>{{ msg }}</p>
      </div>
    </template>
    <script>
    export default {
      name: "HelloWorld",
      props: {
        msg: String
      }
      // some code
    };
    </script>
    
    /* Child1Child1 */
    <template>
      <div class="hello">
        <p>{{ msg }}123123</p>
      </div>
    </template>
    <script>
    export default {
      name: "Child1Child1",
      props: {
        msg: String
      }
      // some code
    };
    </script>
    

    在CodeSandbox中打开

    (二)子组件向父组件传递参数

    /* Parent */
    <template>
      <div id="app">
        <h3>parent</h3>
        <Child2 @changParent='dealFromChild2'/>
      </div>
    </template>
    <script>
    import Child2 from "./components/Child2";
    
    export default {
      name: "App",
      components: {
        Child2
      },
      data () {
        return {
          fromChild2: ''
        }
      },
      methods: {
        dealFromChild2 (val) {
          this.fromChild2 = val;
        }
      }
    };
    </script>
    
    /* Child2 */
    <script>
    export default {
      name: "Child2",
      data() {
        return {};
      },
      mounted () {
        setTimeout(() =>{
          this.$emit('changParent', 'come from Child2')
        }, 1000)
      }
    };
    </script>
    

    在CodeSandbox中打开

    (三)兄弟组件传递参数

    /* Parent */
    <template>
      <div id="app">
        <h3>parent</h3>
        <Child2 @changParent='dealFromChild2'/>
        <Child1 :fromChild2='fromChild2'>
      </div>
    </template>
    <script>
    import Child2 from "./components/Child2";
    import Child1 from "./components/Child1";
    
    export default {
      name: "App",
      components: {
        Child2
      },
      data () {
        return {
          fromChild2: ''
        }
      },
      methods: {
        dealFromChild2 (val) {
          this.fromChild2 = val;
        }
      }
    };
    </script>
    
    /* Child2 */
    <script>
    export default {
      name: "Child2",
      data() {
        return {};
      },
      mounted () {
        setTimeout(() =>{
          this.$emit('changParent', 'come from Child2')
        }, 1000)
      }
    };
    </script>
    
    /* Child1 */
    <template>
      <div class="hello">
        <p>{{ fromChild2 }}</p>
      </div>
    </template>
    export default {
      name: "HelloWorld",
      props: {
        fromChild2: String
      }
      // some code
    };
    

    在CodeSandbox中打开

    在github上编辑此页

    原文地址:https://segmentfault.com/a/1190000016784633
  • 相关阅读:
    电脑与欧姆龙plc通过网络通信
    photometric_stereo halcon光度立体法三维表面重建
    WPF实现放大镜
    备忘
    Halcon模板匹配
    C# Halcon联合编程问题(二)
    C# Halcon混合编程中遇到的问题(一)
    各个平台的解释
    python数据结构的性能测试
    docker container里面为什么不用装OS
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9900979.html
Copyright © 2011-2022 走看看