Мы хотели бы включить запрос, когда строка содержит более 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, которое:
falsetrue после выполнения условия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в вашем случае?