Доступ к реактивным свойствам с помощью vee-validate 4

#vee-validate

#vee-validate

Вопрос:

Я задумываюсь о Vee-Validate next (v4) и о том, как я мог бы включить его в проект Vue 3, не теряя реактивности Vue (т. Е. Не полагаясь на значения, просто передаваемые в событие отправки формы).

Например, если бы я создавал гипотетический компонент с функцией автозаполнения и отправлял запрос get на сервер после ввода 3 букв, но для того, чтобы сам ввод был действительным, требовалось 8 букв, как бы я получил значение, связанное с вводом?

используя обычный Vue, с псевдокодом что-то вроде:

 defineComponent({
  setup () {
    const myVal = ref('')
    const options = ref([])
    watchEffect(() => if (myVal.value.length > 3) {
      axios.get(...).then(serverVals => options.value = serverVals))
    })
    return { myVal, options }
 

как бы я добился этого с помощью vee-validate 4.x?

 defineComponent({
  setup () {
    const schema = yup.object({ myVal: yup.string().required().min(8) })
    // ???? what now to watch myVal 
 

пожалуйста, обратите внимание, что речь идет не об автозаполнении — ползунок диапазона, в котором я хотел вызвать сервер, когда значение было больше 10, но сообщение о проверке, если оно больше 90, также будет достаточным в качестве примера.

Ответ №1:

Вы могли бы использовать useField здесь, чтобы получить реактивное значение, которое просматривается автоматически.

 const { value: myVal, errorMessage } = useField('myVal', undefined, {
  initialValue: ''
});
const options = ref([])
watchEffect(() => if (myVal.value.length > 3) {
  axios.get(...).then(serverVals => options.value = serverVals))
})

return { myVal, options }
 

В документации приведен пример использования useField :

https://vee-validate .logaretm.com/v4/guide/composition-api#usefield ()

Обратите внимание, что вам не нужно использовать useForm , если вы используете <Form> component и переходите schema к нему, тогда это должно работать нормально.

Комментарии:

1. Но что, если у меня уже есть реактивное свойство из хранилища (я использую pinia, оно похоже на vuex)?

2. Есть ли способ переопределить значение для ввода (v-bind=»field»), если я использую форму, поля из vee-validate?