Vue+JSX使用例子

栏目: 编程工具 · 发布时间: 5年前

内容简介:使用

Props

传递参数

/src/Demo.vue 子组件

<script>
export default {
  props: ["msg"],
  render() {
    return (
      <div>
        <p>子组件</p>
        <p>msg: {this.msg}</p>
      </div>
    );
  }
};
</script>

/src/App.vue 父组件

<script>
import Demo from "./Demo";
export default {
  data() {
    return {
      msg: "default"
    };
  },
  render() {
    return (
      <div>
        <p>父组件</p>
        <hr />
        <Demo msg={this.msg} />
      </div>
    );
  }
};
</script>

使用 JSX 编写之后,你会发现以上对比以前的写法,好像缺少了 components 这个配置项。

是的,JSX上你完全不用配置 compoents ,直接写上去就行,这是我比较喜欢的

以上简单的参数传递(单向绑定)想必大家都能懂,但如何实现双向绑定呢?

绑定事件

src/App.vue 父组件

<script>
import Demo from "./Demo";
export default {
  data() {
    return {
      msg: "default"
    };
  },
  methods: {
    handleOnInput(e) {
      // 子组件 input的事件回调
      // 实现 改变msg值
      this.msg = e.target.value;
    }
  },
  render() {
    return (
      <div>
        <p>父组件</p>
        <p>msg: {this.msg}</p>
        <hr />
        <Demo msg={this.msg} handleChange={this.handleOnInput} />
      </div>
    );
  }
};
</script>

<Demo handleChange={ this.handleOnInput} />

子组件的 handleChange props值与父组件 handleOnInput 绑定

/src/Demo.vue 子组件

<script>
export default {
  props: ["msg", "handleOnChange"],
  render() {
    return (
      <div>
        <p>子组件</p>
        <p>msg: {this.msg}</p>
        
        <!--onInput被触发时,交由父组件事件处理-->
        <input value={this.msg} onInput={this.handleChange} />

      </div>
    );
  }
};
</script>

props:["handleOnChange"] 事件必须要配置

<input onInput={this.handleChange} />
当输入框触发 onInput 事件时,交由父组件的事件处理

其实 JSX 双向绑定就是从原生事件中获取到值之后赋值到对应的变量中,从而达到v-model的效果

传递组件

/src/components/HelloWorld.vue

export default {
    render() {
      return (
          <div>Hello</div>
      );
    }
}

/src/Demo.vue

export default {
    props: ["component"],
    render(h) {
      return (
          <div>
              <p>子组件</p>
              
              <!--父组件传入来的组件-->
              { h(this.component) }
          </div>
      );
    }
}

/src/App.vue

import HelloWorld from './components/HelloWorld'
import Demo from './Demo'
export default {

    render(h) {
      return (
          <div>
              <p>父组件</p>
              
              <!--向子组件传入组件-->
              <Demo component={HelloWorld} />
          </div>
      );
    }
}

通过 props 方式,把一个组件传入到子组件中渲染

利用 render(h)h 实现渲染


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

疯传:让你的产品、思想、行为像病毒一样入侵(全新修订版)

疯传:让你的产品、思想、行为像病毒一样入侵(全新修订版)

[美] 乔纳•伯杰(Jonah Berger) / 乔迪、王晋 / 电子工业出版社 / 2016-6 / 68.00

是什么让事物变得流行? 从买轿车、买衣服、吃三明治,到给孩子取名字,你是否知道为什么某些产品会大卖,某些故事被人们口口相传,某些电子邮件更易被转发,或者某些视频链接被疯狂地点击,某些谣言更具传播力,某些思想和行为像病毒一样入侵你的大脑……这本书将为你揭示这些口口相传和社会传播背后的科学秘密,并且告诉你如何将产品、思想、行为设计成具有感染力和传播力的内容。 无论你是大公司的管理者,还是努......一起来看看 《疯传:让你的产品、思想、行为像病毒一样入侵(全新修订版)》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具