Learn how to approach your first ticket in the Labs project and understand the development workflow.
Learn best practices for implementing features in a React application and working with the project's codebase.
Understand how to interact with APIs, handle data fetching, and manage state in your React application.
// Example of fetching data from an API using axios
import axios from 'axios';
import { useState, useEffect } from 'react';
function DataFetching() {
  const [data, setData] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);
  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get('https://api.example.com/data');
        setData(response.data);
        setLoading(false);
      } catch (error) {
        setError(error.message);
        setLoading(false);
      }
    };
    fetchData();
  }, []);
  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error}</div>;
  return (
    <div>
      {data.map(item => (
        <div key={item.id}>{item.name}</div>
      ))}
    </div>
  );
}
            Learn how to create well-designed, reusable components for your React application.
// Example of a reusable button component
import React from 'react';
import PropTypes from 'prop-types';
import './Button.css';
const Button = ({ 
  variant = 'primary',
  size = 'medium',
  disabled = false,
  children,
  onClick,
  ...props 
}) => {
  const classNames = `btn btn-${variant} btn-${size} ${disabled ? 'btn-disabled' : ''}`;
  
  return (
    <button 
      className={classNames}
      disabled={disabled}
      onClick={onClick}
      {...props}
    >
      {children}
    </button>
  );
};
Button.propTypes = {
  variant: PropTypes.oneOf(['primary', 'secondary', 'danger', 'success']),
  size: PropTypes.oneOf(['small', 'medium', 'large']),
  disabled: PropTypes.bool,
  children: PropTypes.node.isRequired,
  onClick: PropTypes.func
};
export default Button;