ホームページ > ウェブフロントエンド > Vue.js > reactive を使用して vue3 で配列をラップし、値を正しく割り当てる方法

reactive を使用して vue3 で配列をラップし、値を正しく割り当てる方法

王林
リリース: 2023-05-16 16:10:06
転載
6652 人が閲覧しました

    reactive を使用して配列をラップし、値を正しく割り当てます

    要件: インターフェイスによって要求されたリスト データを応答データ arr に割り当てます

    const arr = reactive([]);
     
    const load = () => {
      const res = [2, 3, 4, 5]; //假设请求接口返回的数据
      // 方法1 失败,直接赋值丢失了响应性
      // arr = res;
      // 方法2 这样也是失败
      // arr.concat(res);
      // 方法3 可以,但是很麻烦
      res.forEach(e => {
        arr.push(e);
      });
    };
    ログイン後にコピー

    vue3 は proxy を使用します。オブジェクトにも配列にも値全体を直接割り当てることはできません。

    方法 1 を使用すると、reactive でラップされたオブジェクトに直接代入することができないことがわかります。

    方法 2 が機能しないのはなぜですか?

    リアクティブ配列の応答性を維持できるのは、プッシュまたはインデックス トラバーサル割り当てだけですか?

    配列全体を応答性の高いデータに簡単に接続するにはどうすればよいですか?

    いくつかのメソッドを提供します

    const state = reactive({
      arr: []
    });
     
    state.arr = [1, 2, 3]
    ログイン後にコピー

    or

    const state = ref([])
     
    state.value = [1, 2, 3]
    ログイン後にコピー

    or

    const arr = reactive([])
     
    arr.push(...[1, 2, 3])
    ログイン後にコピー

    これらのメソッドは応答性をトリガーできます。最初のメソッドが推奨されます

    vue3 のリアクティブな再割り当ては無効です

    vue3 公式ドキュメント

    reactive() はオブジェクトの応答型プロキシを返します

    したがって、必要に応じて、リアクティブ メソッドはオブジェクト Object に対して動作する必要があります。配列を使用する場合は、それをラップする必要があります:

    let list = reactive({
        data: [{id: 01, name: 'XXX'}]
    })
    ログイン後にコピー

    または参照を使用します:

    let list = ref([{id: 1, name: 'Andy'}])
    ログイン後にコピー

    元の作成者のコードが引用されています:

    import { reactive, ref } from 'vue'
    export default {
      setup() {
        // 需要一个带默认值的数组list;
          let list = reactive([{id: 1, name: 'Andy'}])
        
        // 每次触发事件重置list,把新值放入,此种方式不会触发视图更新
        const checkBtn = () => {
          // 此时重置操作 地址指向变成一个新的地址,不会触发视图更新
          list = [{id: 1, name: 'Andy'}]
          list.push({id: 2, name: 'Lucy'})
        }
        
        // --------------------------------------------------
        // 正确的重置处理方法如下:使用reactive将数组包裹到一个对象中
        let list = reactive({
          data: [{id: 1, name: 'Andy'}]
        });
        const checkBtn = () => {
          list.data = [{id: 1, name: 'Andy'}]
          list.data.push({id: 2, name: 'Lucy'})
        }
        // 或者使用ref
        let list = ref([{id: 1, name: 'Andy'}]);
        const checkBtn = () => {
          list.value = [{id: 1, name: 'Andy'}]
          list.value.push({id: 2, name: 'Lucy'})
        }
        return {
          list,
          checkBtn
        }
      },
    }
    ログイン後にコピー

    以上がreactive を使用して vue3 で配列をラップし、値を正しく割り当てる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート