Мы хотели бы включить запрос, когда строка содержит более 3 символов. После включения запроса он должен оставаться включенным. Используя Vue 2 Composition API, мы создали объект reactive
со статусом запросов:
import { computed, defineComponent, reactive, ref } from '@vue/composition-api'
export default defineComponent({
setup() {
const truckId = ref<string>('')
const driverId = ref<string>('')
const queryEnabled = reactive({
driver: false,
truck: false,
})
Теперь, чтобы установить значение для queryEnabled.driver
на true
, когда driverId
является строкой длиной более 3 символов, мы можем сделать это:
const queryEnabled = reactive({
driver: computed(() => driverId.value.length >= 3),
truck: false,
})
Это работает, но также устанавливает queryEnabled.driver
в false
, если в строке меньше символов. Как у нас может быть свойство computed
, которое:
false
true
после выполнения условияtrue
после того, как оно было установлено ранее, и не меняет его обратноМожно ли это сделать только из одного свойства computed
в объекте reactive
? Я думал использовать function
вместо жирной стрелки для доступа this
к текущему computed
свойству, но не могу понять.
Вы не можете получить доступ к свойству computed
изнутри него самого, поэтому используйте watch
для обновления состояния на основе driverId
:
import { watch, defineComponent, reactive, ref } from '@vue/composition-api'
export default defineComponent({
setup() {
const truckId = ref<string>('')
const driverId = ref<string>('')
const queryEnabled = reactive({
driver: false,
truck: false,
})
watch(driverId,(newVal)=>{
if (!queryEnabled.driver && newVal.length >= 3){
queryEnabled.driver = true
}
})
Это определенно вариант. Но я надеялся, что это возможно в пределах одного объекта computed
.
computed
prop не считается «неизменяемым».
Я думал о вычислении с параметрами получения и установки, но это не дает решения
@DarkLite1 давайте предположим, что мы можем получить доступ к свойству внутри себя, которое может создать бесконечный цикл, это похоже на sum=a+b
мы не можем получить доступ к сумме с правой стороны
Разве вы не можете использовать
watcheffect
сreactive
в вашем случае?