Contoh penggunaan

Dalam contoh di atas, kita menggunakan useState untuk mengelola state dari email, password, dan error. Validasi dilakukan saat tombol Login ditekan dengan menggunakan yup. Jika ada kesalahan validasi, pesan kesalahan akan ditampilkan di dalam komponen Alert dari Chakra UI. Jika validasi berhasil, Anda dapat menambahkan logika login sesuai kebutuhan di dalam fungsi handleLogin.

import React, { useState } from 'react';
import {
  Input,
  Button,
  FormControl,
  FormLabel,
  FormErrorMessage,
  VStack,
  Alert,
  AlertIcon,
} from '@chakra-ui/react';
import * as yup from 'yup';

const Login = () => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [error, setError] = useState('');

  const schema = yup.object().shape({
    email: yup.string().email('Email tidak valid').required('Email diperlukan'),
    password: yup.string().required('Password diperlukan'),
  });

  const handleLogin = async () => {
    try {
      await schema.validate({ email, password }, { abortEarly: false });
      // Logika login akan ditempatkan di sini
      console.log('Login berhasil dengan email:', email);
      // Reset state setelah login berhasil
      setEmail('');
      setPassword('');
      setError('');
    } catch (err) {
      if (err instanceof yup.ValidationError) {
        const errors = err.errors.join(' ');
        setError(errors);
      }
    }
  };

  return (
    <VStack spacing={4} align="center">
      {error && (
        <Alert status="error">
          <AlertIcon />
          {error}
        </Alert>
      )}
      <FormControl isInvalid={!!error}>
        <FormLabel>Email</FormLabel>
        <Input
          type="email"
          value={email}
          onChange={(e) => setEmail(e.target.value)}
        />
      </FormControl>

      <FormControl isInvalid={!!error}>
        <FormLabel>Password</FormLabel>
        <Input
          type="password"
          value={password}
          onChange={(e) => setPassword(e.target.value)}
        />
      </FormControl>

      <Button onClick={handleLogin} colorScheme="teal">
        Login
      </Button>
    </VStack>
  );
};

export default Login;

Last updated