美文网首页
Vue,和React,实现的双向数据绑定效果

Vue,和React,实现的双向数据绑定效果

作者: BA_凌晨四点 | 来源:发表于2020-11-17 23:11 被阅读0次

假设有这样的需求,用Vue和React,分别是怎么实现的呢?


双向数据绑定.gif

Vue的实现方法:

<template>
  <div class="test">
    <label
      class="hobbies"
      :for="hobby.name"
      v-for="hobby in hobbies"
      :key="hobby.name"
    >
      <input
        type="checkbox"
        :id="hobby.name"
        :value="hobby.name" // 绑定好每个项的value,让每个项都独立起来
        v-model="picked"  // 双向绑定数组,每checked一项,数组就多一项
      />
      {{ hobby.value }}
    </label>
    <button @click="myHobbies">查看我的爱好</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      picked: [],  // 定义一个空数组,用来装那些选中的项
      hobbies: [
        { name: "sing", value: "唱" },
        {
          name: "dance",
          value: "跳"
        },
        {
          name: "rap",
          value: "说唱"
        },
        {
          name: "basketball",
          value: "篮球"
        }
      ]
    };
  },
  methods: {
    myHobbies() {
      console.log(this.picked);
    }
  }
};
</script>

Vue的实现方法是利用v-model,就能进行双向数据绑定,然后绑定好每个checkbox 的value,让它们独立起来。利用v-model就能往数组增删项。

React 的实现方法:

import React from 'react';
class Test extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            picked: [],  //定义空数组,用来装那些选中项
            hobbies: [
                { name: "sing", value: "唱" },
                {
                    name: "dance",
                    value: "跳"
                },
                {
                    name: "rap",
                    value: "说唱"
                },
                {
                    name: "basketball",
                    value: "篮球"
                }
            ]
        }
    }

    handleChange = (e) => {
        // console.log(e.target.value)
        // console.log(this)
        if (this.state.picked.includes(e.target.value)) {  // 如果点击的那一项,在picked 中是存在的,说明要进行取消选择的操作。
            this.setState({
                picked: this.state.picked.filter(item => item != e.target.value),将点击的那一项踢掉。(同样是不能直接改变原数组)
            });
        } else {
            this.setState({
                picked: [...this.state.picked, e.target.value]  // 将点击的哪一项加进来,(注意不能直接修改 this.state的数据)
            })
        }
    }

    getMyHobbies = () => {
        console.log(this.state.picked)
    }

    render() {
        const myHobbies = (
            this.state.hobbies.map(hobby => {
                return (
                    <label htmlFor={hobby.name} key={hobby.name}>
                        <input type="checkbox"
                            checked={
                                this.state.picked.includes(hobby.name)
                            } // 利用checked属性去判断状态是否被选中
                            onChange={this.handleChange} // 手动触发onChange事件
                            value={hobby.name}  // 绑定好每个项的value
                        />
                        {hobby.value}
                    </label>
                )
            })
        );

        return (
            <div>
                {myHobbies}
                <button onClick={this.getMyHobbies}>查看我的爱好</button>
            </div>
        )
    }
}

export default Test;

React的实现方法则是通过 checked 去监听事件选中的状态,在利用onChange去改变状态。改变状态的原理是利用数组的map方法,进行增删。

总结

由此可见,Vue的操作,更像是在驾驶自动挡汽车,感觉很魔法。而React的操作更像是在驾驶手动挡汽车,很多都要自己来干

相关文章

  • vue 双向数据绑定

    Vue实现数据双向绑定的原理:Object.defineProperty()vue实现数据双向绑定主要是:采用数据...

  • Vue和React数据绑定对比

    在数据绑定上来说,vue的特色是双向数据绑定,而在react中是单向数据绑定。 一 单向和双向数据绑定其实不是完全...

  • 深入Vue响应式原理

    1.Vue的双向数据绑定 参考 vue的双向绑定原理及实现Vue双向绑定的实现原理Object.definepro...

  • Vue实现数据双向绑定的原理

    Vue实现数据双向绑定的原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数...

  • Vue框架基础

    原生js与Vue框架的区别 用原生实现双向数据绑定 用Vue实现双向数据绑定 Vue是一个javaScript框架...

  • 前端面试题:VUE

    1. vue的双向数据绑定实现原理? 2. vue如何在组件之间进行传值? 3. vuex和vue的双向数据绑定...

  • vue

    1、vue的双向数据绑定实现原理 2、vue如何在组件之间进行传值 3、vuex和vue的双向数据绑定有什么冲突 ...

  • Vue,和React,实现的双向数据绑定效果

    假设有这样的需求,用Vue和React,分别是怎么实现的呢? Vue的实现方法: Vue的实现方法是利用v-mod...

  • 【转】JavaScript的观察者模式(Vue双向绑定原理)

    关于Vue实现数据双向绑定的原理,请点击:Vue实现数据双向绑定的原理原文链接:JavaScript设计模式之观察...

  • Vue.js数据双向绑定实现

    目前的几种主流前端框架中,react是单向绑定,而angular.js和vue.js是双向绑定,实现双向绑定的方法...

网友评论

      本文标题:Vue,和React,实现的双向数据绑定效果

      本文链接:https://www.haomeiwen.com/subject/xmwovktx.html