- vừa được xem lúc

Validation với Yup trong React

0 0 41

Người đăng: Lonh Thanh

Theo Viblo Asia

Ở bài viết này chúng ta sẽ tìm hiểu tại sao nên sử dụng Yup trong React, nó chính xác là gì và cách ứng dụng tối đa Yup trong code cùng ví dụ.

Yup là gì?

Yup là một Javascript object schema validator. Cùng lấy một ví dụ đơn giản để hiểu hơn về yup nhé. Cùng hướng tới một form đăng nhập bao gồm các trường 'username' và 'password'. Trước khi gửi request chúng ta cần kiểm tra xem end-user đã nhập đầy đủ thông tin và đúng kiểu dữ liệu hay không. Vỳ vậy chúng ta cần xác định được đối tượng cảu chúng ta là gì, bắt buộc những gì và kiểu dữ liệu được phép gửi request lên là gì. Từ đó chúng ta có thể sử dụng yup để kiểm tra dữ liệu được nhập có phù hợp với đối tượng đó không.

Tại sao chúng ta nên sử dụng Yup?

Yup làm cho ứng dụng của chúng ta trở nên dễ dàng hơn trong việc kiểm tra dữ liệu mà không cần can thiệp vào logic. Các ứng dụng web được xây dựng trên Frameworks Javascript có tính tương tác cao và có thể thay đổi trong chính nó; đó cũng chính là những gì người dùng mong đợi. Với điều này sẽ xuất hiện một lượng lớn dữ liệu được trao đổi liên tục dù đó là từ yêu cầu của API, form hay các đối tượng tùy chỉnh để xử lý trạng thái.

Vì vậy chúng ta cần đảm bảo rằng chúng ta đang cung cấp dữ liệu đúng để cho các component hoạt động, nếu không chúng ta sẽ gặp những sự cố không mong muốn, điều này là thật tệ. Yup có thể giúp chúng ta giải quyết vấn đề này.

Vậy Yup hoạt động như thế nào?

Cách đơn giản nhất để sử dụng Yup là:

  1. Định nghĩa một Object schema và validation nó
  2. Tạo đối trượng validate sử dụng Yup tương ứng với Object schema và validation
  3. Sử dụng function 'validate' của Yup (nếu object hợp lệ thì passed)

Cùng lấy một ví dụ để dễ hình dung nha mọi người 😄. ở đây chúng ta lấy ví dụ về một object là "person":

const person = { old: 25, name: "Dang Dinh Luan", phone: "0987654321", email: "_@.com"
};

Để một object person hợp lệ nó cần đáp ứng các điều kiện sau:

  • "name", "phone", "email" phải có kiểu là string
  • "phone" phải là một chuỗi toàn số
  • "email" phải có định dạng đúng
  • "old" phải có kiểu là number
  • Ngoại trừ "email" tất cả phải là bắt buộc

Validator Object

Bây giờ chúng ta sẽ dựa vào yup để tạo Validator object cho đối tượng person ở trên:

const yup = require("yup");
const phoneRegExp = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$/ const yupObject = yup.object().shape({ old: yup.number().required(), name: yup.string().required(), phone: yup.string().required().matches(phoneRegExp, 'Phone number is not valid'), email: yup.string().email()
});

😄 Đoạn mã này chắc mọi người đều hiểu nhỉ, nó tương đương với việc định nghĩa các proptypes trong react.

Xác thực (Verify)

Tiếp theo chúng ta sẽ cùng nhau đi xác thực object person ở trên bằng cách sử dụng phương thức "validate" trong yup:

yupObject .validate(person) .then(function(value) { console.log(value); // returns person object }) .catch(function(err) { console.log(err); });

Phương thức "validate" sẽ trả về object đó nếu nó hợp lệ và trả về đối tượng kèm theo lỗi của nó.

const person = { old: 25, phone: "0987654321", email: "_@.com"
};
yupObject.validate(car); //ValidationError: name is a required field

Chúng ta cũng có thể khai báo một chuỗi các validations ví dụ như:

phone: yup.string().required().matches(phoneRegExp, 'Phone number is not valid')

Custom Validation

Trong nhiều trường hợp chúng ta cần custom lại validate sao cho phù hợp và vượt qua những gì mà thư viện yup hỗ trợ. Cùng nhìn vào ví dụ sau:

let customValidation = yup.object().shape({ beverage: yup .string() .test("is-tea", "${path} is not tea", value => value === "tea")
});
await customValidation.validate({ beverage: "tea" });

Trong ví dụ này chúng ta sẽ kiểm tra xem beverage có phải là "tea" hay không.

Async Validation

Để thực hiện validation async hãy trả về "true" hoặc "false" hoặc một ValidationError

let orderTea = yup.object().shape({ bevrage: yup .string() .test( "is-tea", "${path} is not tea", async value => (await value) === "tea" )
});
await orderTea.validate({ bevrage: "coffee" }); // returns Error

Kết luận

Trên đây chúng ta đã cùng nhau đi tìm hiểu cơ bản về yup. Các bạn có thể xem thêm nhiều ví dụ về yup tại đây.

Bài viết được dịch (một phần) và tham khảo từ:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cùng tìm hiểu về các hook trong React hooks

Đối với ai đã từng làm việc với React thì chắc hẳn đã có những lúc cảm thấy bối rối không biết nên dùng stateless (functional) component hay là stateful component. Nếu có dùng stateful component thì cũng sẽ phải loay hoay với đống LifeCycle 1 cách khổ sở Rất may là những nhà phát triển React đã kịp

0 0 81

- vừa được xem lúc

Khi nào nên (và không nên) sử dụng Redux

. Công việc quản lý state với những hệ thống lớn và phức tạp là một điều khá khó khăn cho đến khi Redux xuất hiện. Lấy cảm hứng từ design pattern Flux, Redux được thiết kế để quản lý state trong các project JavaScript.

0 0 106

- vừa được xem lúc

ReactJS: Props và State

Nếu bạn đã học ReactJS hay React Native, bạn sẽ thấy các Props và State được sử dụng rất nhiều. Vậy chính xác chúng là gì? Làm thế nào để chúng ta sử dụng chúng đúng mục đích đây.

0 0 41

- vừa được xem lúc

State và Props trong Reactjs

Hello các bạn, tiếp tục seri tìm hiểu về ReactJs hôm nay mình xin giới thiệu đến các bạn hai thứ mình cho là thú vị nhất của ReactJs là State và Props. State bạn có thể hiểu đơn giản là một nơi mà bạn lưu trữ dữ liệu của Component, từ đó bạn có thể luân chuyển dữ liệu đến các thành phần trong Compon

0 0 36

- vừa được xem lúc

Memoization trong React

. 1.Introduction. Memoization có liên quan mật thiết đến bộ nhớ đệm, và dưới đây là một ví dụ đơn giản:. const cache = {}.

0 0 38

- vừa được xem lúc

Nâng cao hiệu suất React Hooks với React.memo, Memoization và Callback Functions

1.Ngăn Re-render và React.memo. React.

0 0 67