Да, проверяет дочерний объект на соответствие дочернему объекту другого объекта

#javascript #reactjs #validation #yup

#javascript #reactjs #проверка #да

Вопрос:

У меня есть два объекта: страна отправки и страна получения. У каждого из этих двух объектов есть другие поля, но я бы хотел проверить только одно из них. Я хотел бы проверить, совпадает ли страна-получатель со страной-получателем, и если это так, верните ошибку. Я попробовал следующую схему, но она не работает. Я что-то пропустил?

 const validationSchema = object({
    sending_country: object({
        name: string().ensure().required().max(100, "Name too long")
    }),
    receiving_country: object({
        name: string().ensure().required().max(100, "Name too long").when(
            "$sending_country.name", (sending_country, schema) => {
                return schema.test({
                    test: receiving_country => receiving_country.name !== sending_country.name,
                    message: "Both countries cannot be identical"
                })
            })
    })
})
  

Ответ №1:

В итоге я немного смешал решения

 const validationSchema = object({
    sending_country: object({
        name: string().ensure().required().max(100, "Name too long")
    }),
    receiving_country: object().shape({
        name: string().ensure().required().max(100, "Name too long")
    }).when(
        "sending_country", (sending_country, schema) => {
            return schema.test({
                test: receiving_country => receiving_country.name !== sending_country.name,
                message: "Both countries cannot be identical"
            })
        })

})