VueCompostionAPI에서 ref 및reactive 사용 방법 정보
11925 단어 JavaScriptTypeScriptVue.js
입문
저번 기사부터 계속할게요.
Vue3.x부터 사용할 예정인 CompositionAPI 및 Vue2비교 x
저번 보도를 쓸 때
ref
와 reactive
의 차이이것들에 관해서는 아직 설치하면서 확인 중이니 따로 정리하고 싶습니다.
기재했습니다.
이번에는 그런 실시와 동시에 남기고 싶어요.
또한 확인할 때 설치된 원본 코드는 아래github와 같습니다.
vue-composition-api-test
전제 환경
VueCLI v4.0.5
node v10.16.0
yarn v1.13.0
다시 활성화된 어셈블리 API 객체
compostionAPI에서 객체 재활성화를 정의할 때 ref와reactive 두 가지 유형이 있습니다.
그런 거 접촉할 거예요.
ref 정보
ref는 단일value 속성을 가진 기본체 대상이다.
그림에서 볼 때 이전에 데이터 () 에서 정의한 것이 비교적 가깝다.
호출 방식
vue2.x 시스템에서 사용할 때compositionAPI에서 가져옵니다.
HelloRef.vue
import { createComponent, ref } from "@vue/composition-api";
정의 방법
setup()
함수에 다음과 같은 변수를 정의합니다.HelloRef.vue
const RefHelloCount = ref(1);
그룹을 정의할 수도 있습니다.HelloRef.vue
const Animals = ref(["cat", "dog", "hamster"]);
다음 데이터를 정의할 때는 아래reactive
를 사용합니다.HelloRef.vue
let RefAnimalObjects = ref({
cat: 1,
dog: 2
});
값 액세스 방법
setup()
함수의 방법 등에서 변수 값을 호출할 때変数名.value
, 템플릿에서 직접 {{変数名}}
변수 값을 호출합니다.따로따로 확인하다
setup () 함수에서 호출
숫자만 늘리는 방법을 가져와보세요.
다음과 같이 실패합니다.
HelloRef.vue
const incrementHello = () => {
RefHelloCount++;
};
이것은 ref
에 정의된 변수가 기본 대상이기 때문이다.콘솔에 출력된 데이터를 확인하면 다음과 같습니다.
따라서 방금의 처리에 대해 다음과 같이 수정한다.
HelloRef.vue
const incrementHello = () => {
refHelloCount.value++;
};
이렇게 하면 정상적으로 일할 수 있다.template에서 호출
tempalte를 표시할 때
value
를 표시하지 않아도 문제가 없습니다.API 내부에서
value
expose
처리되므로 value
없이 기록됩니다.HelloRef.vue
<p>{{ RefHelloCount }}</p>
주의사항
value
도 상관없다.API에서 잘 변경됩니다value
reactive
정의 대상reactive
다른 것을 검사하다
reactive
.우리도 ref와 같이
composition-api
에서 가져옵니다.HelloRef.vue
import { createComponent, reactive } from "@vue/composition-api";
정의 방법
방금 ref에서 정의하고 분산된 내용을 정리할 수 있습니다.
return에서도 정의된 변수를 기록할 수 있습니다.
HelloRef.vue
const ReactiveData = reactive({
count: 1,
ReativeAnimals: ["cat", "dog", "hamster"]
});
return {
ReactiveData
};
값 액세스 방법
위의 정의와 같이
setup()
함수에서 変数名.key
을 사용하여 액세스합니다.템플릿 변수에서 変数名.key
(value 필요 없음) 를 사용해도 접근할 수 있습니다.각자 확인하다.
setup () 함수에서 호출
変数名.key
적절한 값에 액세스합니다.또한 이때 필요하지 않습니다
value
.이 점에 관해서 나는 이것이 방문
ref
에서 만든 데이터보다 더 간단하고 이해하기 쉽다고 생각한다.HelloRef.vue
const incrementHelloReactve = () => {
ReactiveData.count++;
};
template에서 호출
접근 값은
template
에서 상응하는 변수 ref
를 호출하는 것보다 종종 더 지루하다.HelloRef.vue
return {
ReactiveData
};
↓ 上記データをtemplate内で使用する
<p>
{{ReactiveData.count}}
{{ReactiveData.animals}}
</p>
따라서 이 객체를 평면 객체toRefs
로 변환하는 방법을 사용합니다.이것은 모든 속성을 하나의 평면 대상으로 변환합니다.template에서 호출할 때 지루한 쓰기가 필요하지 않습니다.
return {
...toRefs(ReactiveData)
};
return 부분에서 상술한 바와 같이 template
내의 기술은 다음과 같다.<p>
{{count}}
{{animals}}
</p>
아주 간단해졌어요.API 내부의 작업
compostionAPI 내에서 무엇을 하는지 확인했습니다.
node_modules/@vue/compostion-api/vue-composition-api.module.js
의174행부터 191행까지 유사한 기록이 있다.
composition-api
function isPlainObject(x) {
return toString(x) === '[object Object]';
}
function toRefs(obj) {
if (!isPlainObject(obj))
return obj;
var res = {};
Object.keys(obj).forEach(function (key) {
var val = obj[key];
// use ref to proxy the property
if (!isRef(val)) {
val = createRef({
get: function () { return obj[key]; },
set: function (v) { return (obj[key] = v); },
});
}
// todo
res[key] = val;
});
return res;
}
isPlainObject
에서 대상 여부를 판단하고 적용되면 obj
회전forEach
으로 getter,setter를 정의합니다.총결산
끝까지 읽어주셔서 감사합니다.
ref와reactive의 차이를 대체적으로 확인했다.
이곳을 터치한 인상은
ref
에서 정의한 변수와 다른 관련성이 희박하고 독립적인 것이 비교적 적합하다는 것이다.다른 한편,
reactive
에 대해 나는 하나의 변수 중에서 key:value
의 형식으로 각자의 관련 변수로 정의하는 것이 비교적 적합하다고 생각한다.예를 들어 사용자의 정보 등이다.
예:
const User = reactive({
name: 'Taro',
age: '19',
sex: 'male'
})
compostionAPI 자체의 문서가 아직 완비되지 않았기 때문에 저는 개인의 제품 등을 깊이 파고들어 어떻게 활용하면 좋을지 판단하고 싶습니다.참고 자료
Reference
이 문제에 관하여(VueCompostionAPI에서 ref 및reactive 사용 방법 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomopict/items/aa50e7eb2cf2436f5385텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)