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
  • 相关阅读:
    软件测试相关面试
    GET和POST两种基本请求方法的区别
    Fiddler的安装与使用
    idea与eclipse项目相互导入的过程
    Selenium 学习笔记
    面试相关的案例
    idea编译启动报错
    window安装redis无法启动报错
    【001】接口测试-常用工具介绍和使用
    pyinstaller 打包exe相关
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9900979.html
Copyright © 2011-2022 走看看