برنامه نویسی

سوالات مصاحبه برنامه نویسی زنده

React یکی از محبوب ترین کتابخانه ها برای ساخت رابط کاربری است. جای تعجب نیست که توسعه دهندگان React تقاضای زیادی دارند. اگر برای مصاحبه React آماده می‌شوید، چالش‌های برنامه‌نویسی زنده بخش مهمی از فرآیند هستند. این چالش‌ها درک شما از مفاهیم React، مهارت‌های حل مسئله و توانایی شما در نوشتن کد تمیز و کارآمد را آزمایش می‌کنند.

در این پست وبلاگ، 20 چالش برنامه نویسی پیشرفته React را پوشش خواهیم داد که می تواند به شما در مصاحبه بعدی کمک کند. هر چالش شامل یک توضیح مشکل و یک مثال راه حل برای کمک به درک بهتر مفهوم است. بیایید شیرجه بزنیم!

فهرست مطالب

  1. یک کامپوننت شمارنده ایجاد کنید
  2. یک سوئیچ Toggle را پیاده سازی کنید
  3. لیست کارهایی بسازید
  4. داده ها را از یک API واکشی کنید
  5. یک نوار جستجو ایجاد کنید
  6. یک منوی کشویی بسازید
  7. یک جزء Tabs را پیاده سازی کنید
  8. یک مؤلفه مدال ایجاد کنید
  9. یک جزء چرخ فلک بسازید
  10. یک مؤلفه رتبه بندی ستاره را پیاده سازی کنید
  11. یک فیلتر جستجوی بلادرنگ ایجاد کنید
  12. یک فرم چند مرحله ای بسازید
  13. یک لیست مجازی را پیاده سازی کنید
  14. یک مؤلفه فرم قابل استفاده مجدد با اعتبارسنجی ایجاد کنید
  15. یک فرم پویا را با آرایه های میدانی پیاده سازی کنید
  16. یک Context API برای Global State پیاده سازی کنید
  17. یک هوک سفارشی ایجاد کنید
  18. با کشیدن و رها کردن، یک لیست کار بسازید
  19. یک تایمر شمارش معکوس ایجاد کنید
  20. Formik را با نتیجه‌گیری Yup Validation اجرا کنید

1. یک Counter Component ایجاد کنید.

مسئله:
یک جزء شمارنده ساده ایجاد کنید که هنگام کلیک کردن روی دکمه‌ها، تعداد را افزایش یا کاهش دهد.

راه حل:

import React, { useState } from 'react';

const Counter = () => {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increase</button>
      <button onClick={() => setCount(count - 1)}>Decrease</button>
    </div>
  );
};

export default Counter;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. یک سوئیچ Toggle را اجرا کنید

مسئله:
یک جزء سوئیچ ضامن بین حالت های “روشن” و “خاموش” ایجاد کنید.
راه حل:

import React, { useState } from 'react';

const ToggleSwitch = () => {
  const [isOn, setIsOn] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOn(!isOn)}>
        {isOn ? 'Off' : 'On'}
      </button>
    </div>
  );
};

export default ToggleSwitch;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. فهرست کارهایی بسازید

مسئله:
یک جزء لیست کارها ایجاد کنید که در آن کاربران بتوانند موارد را به عنوان کامل اضافه، حذف و علامت گذاری کنند.
راه حل:

import React, { useState } from 'react';

const TodoList = () => {
  const [todos, setTodos] = useState([]);
  const [text, setText] = useState('');

  const addTodo = () => {
    if (text) {
      setTodos([...todos, { text, completed: false }]);
      setText('');
    }
  };

  const toggleTodo = index => {
    const newTodos = [...todos];
    newTodos[index].completed = !newTodos[index].completed;
    setTodos(newTodos);
  };

  const removeTodo = index => {
    const newTodos = [...todos];
    newTodos.splice(index, 1);
    setTodos(newTodos);
  };

  return (
    <div>
      <input value={text} onChange={(e) => setText(e.target.value)} placeholder="Add a to-do" />
      <button onClick={addTodo}>Add</button>
      <ul>
        {todos.map((todo, index) => (
          <li key={index} style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>
            {todo.text}
            <button onClick={() => toggleTodo(index)}>Toggle</button>
            <button onClick={() => removeTodo(index)}>Remove</button>
          </li>
        ))}
      </ul>
    </div>
  );
};

export default TodoList;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. داده ها را از یک API واکشی کنید

مسئله:
یک مؤلفه ایجاد کنید که داده ها را از یک API واکشی می کند و در یک لیست نمایش می دهد.
راه حل:

import React, { useState, useEffect } from 'react';

const DataFetcher = () => {
  const [data, setData] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch('https://api.example.com/data')
      .then(response => response.json())
      .then(data => {
        setData(data);
        setLoading(false);
      });
  }, []);

  if (loading) return <p>Loading...</p>;

  return (
    <ul>
      {data.map(item => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
};

export default DataFetcher;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

5. یک نوار جستجو ایجاد کنید

مسئله:
یک مؤلفه نوار جستجو ایجاد کنید که لیستی از موارد را به عنوان کاربر فیلتر می کند.
راه حل:

import React, { useState } from 'react';

const SearchBar = ({ items }) => {
  const [query, setQuery] = useState('');

  const filteredItems = items.filter(item =>
    item.toLowerCase().includes(query.toLowerCase())
  );

  return (
    <div>
      <input
        type="text"
        value={query}
        onChange={e => setQuery(e.target.value)}
        placeholder="Search..."
      />
      <ul>
        {filteredItems.map((item, index) => (
          <li key={index}>{item}</li>
        ))}
      </ul>
    </div>
  );
};

const App = () => {
  const items = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'];

  return <SearchBar items={items} />;
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

6. یک منوی کشویی بسازید

مسئله:
یک جزء منوی کشویی ایجاد کنید که پس از کلیک کردن، فهرستی از موارد را نشان دهد.
راه حل:

import React, { useState } from 'react';

const DropdownMenu = ({ items }) => {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOpen(!isOpen)}>Menu</button>
      {isOpen && (
        <ul>
          {items.map((item, index) => (
            <li key={index}>{item}</li>
          ))}
        </ul>
      )}
    </div>
  );
};

const App = () => {
  const items = ['Profile', 'Settings', 'Logout'];

  return <DropdownMenu items={items} />;
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

7. یک جزء Tabs را پیاده سازی کنید

مسئله:
یک جزء برگه ها ایجاد کنید که در آن هر برگه هنگام انتخاب محتوای متفاوتی را نمایش دهد.
راه حل:

import React, { useState } from 'react';

const Tabs = ({ tabs }) => {
  const [activeTab, setActiveTab] = useState(0);

  return (
    <div>
      <div className="tab-buttons">
        {tabs.map((tab, index) => (
          <button
            key={index}
            className={index === activeTab ? 'active' : ''}
            onClick={() => setActiveTab(index)}
          >
            {tab.label}
          </button>
        ))}
      </div>
      <div className="tab-content">
        {tabs[activeTab].content}
      </div>
    </div>
  );
};

const App = () => {
  const tabs = [
    { label: 'Tab 1', content: <div>Content of Tab 1</div> },
    { label: 'Tab 2', content: <div>Content of Tab 2</div> },
    { label: 'Tab 3', content: <div>Content of Tab 3</div> },
  ];

  return <Tabs tabs={tabs} />;
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

8. یک مؤلفه مدال ایجاد کنید

مسئله:
یک مؤلفه مودال قابل استفاده مجدد ایجاد کنید که می تواند باز و بسته شود و هر محتوایی را که به آن منتقل می شود نمایش دهد.
راه حل:

import React, { useState, useEffect } from 'react';
import ReactDOM from 'react-dom';

const Modal = ({ isOpen, onClose, children }) => {
  useEffect(() => {
    if (isOpen) {
      document.body.style.overflow = 'hidden';
    } else {
      document.body.style.overflow = 'auto';
    }
  }, [isOpen]);

  if (!isOpen) return null;

  return ReactDOM.createPortal(
    <div className="modal-overlay" onClick={onClose}>

 <div className="modal-content" onClick={e => e.stopPropagation()}>
        <button className="modal-close" onClick={onClose}>Close</button>
        {children}
      </div>
    </div>,
    document.body
  );
};

const App = () => {
  const [isModalOpen, setIsModalOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsModalOpen(true)}>Open Modal</button>
      <Modal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>
        <h1>Modal Content</h1>
        <p>This is the content inside the modal</p>
      </Modal>
    </div>
  );
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

9. یک جزء چرخ فلک بسازید

مسئله:
یک جزء چرخ فلک ایجاد کنید که در میان مجموعه ای از تصاویر چرخه می زند.
راه حل:

import React, { useState } from 'react';

const Carousel = ({ images }) => {
  const [currentIndex, setCurrentIndex] = useState(0);

  const goToNext = () => {
    setCurrentIndex((currentIndex + 1) % images.length);
  };

  const goToPrevious = () => {
    setCurrentIndex((currentIndex - 1 + images.length) % images.length);
  };

  return (
    <div className="carousel">
      <button onClick={goToPrevious}>Previous</button>
      <img src={images[currentIndex]} alt="carousel" />
      <button onClick={goToNext}>Next</button>
    </div>
  );
};

const App = () => {
  const images = [
    'https://via.placeholder.com/600x400?text=Image+1',
    'https://via.placeholder.com/600x400?text=Image+2',
    'https://via.placeholder.com/600x400?text=Image+3',
  ];

  return <Carousel images={images} />;
};

export default App;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

10. یک مؤلفه رتبه بندی ستاره را پیاده سازی کنید

مسئله:
یک جزء رتبه بندی ستاره ایجاد کنید که در آن کاربران می توانند چیزی را از 1 تا 5 ستاره رتبه بندی کنند.
راه حل:

import React, { useState } from 'react';

const StarRating = ({ totalStars = 5 }) => {
  const [rating, setRating] = useState(0);

  return (
    <div>
      {[...Array(totalStars)].map((star, index) => {
        const starValue = index + 1;
        return (
          <span
            key={index}
            onClick={() => setRating(starValue)}
            style={{ cursor: 'pointer', color: starValue <= rating ? 'gold' : 'gray' }}
          >
            
          </span>
        );
      })}
    </div>
  );
};

const App = () => {
  return (
    <div>
      <h1>Star Rating</h1>
      <StarRating />
    </div>
  );
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

11. یک فیلتر جستجوی بلادرنگ ایجاد کنید

مسئله:
یک مؤلفه فیلتر جستجو ایجاد کنید که لیستی از موارد را در زمان واقعی به عنوان کاربر فیلتر می کند.
راه حل:

import React, { useState } from 'react';

const RealTimeSearch = ({ items }) => {
  const [query, setQuery] = useState('');

  const filteredItems = items.filter(item =>
    item.toLowerCase().includes(query.toLowerCase())
  );

  return (
    <div>
      <input
        type="text"
        value={query}
        onChange={e => setQuery(e.target.value)}
        placeholder="Search..."
      />
      <ul>
        {filteredItems.map((item, index) => (
          <li key={index}>{item}</li>
        ))}
      </ul>
    </div>
  );
};

const App = () => {
  const items = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'];

  return <RealTimeSearch items={items} />;
};

export default App;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

12. یک فرم چند مرحله ای بسازید

مسئله:
یک فرم چند مرحله ای ایجاد کنید که در آن کاربران بتوانند بین مراحل مختلف فرم حرکت کنند.
راه حل:

import React, { useState } from 'react';

const Step1 = ({ next }) => (
  <div>
    <h2>Step 1</h2>
    <button onClick={next}>Next</button>
  </div>
);

const Step2 = ({ next, previous }) => (
  <div>
    <h2>Step 2</h2>
    <button onClick={previous}>Previous</button>
    <button onClick={next}>Next</button>
  </div>
);

const Step3 = ({ previous }) => (
  <div>
    <h2>Step 3</h2>
    <button onClick={previous}>Previous</button>
    <button type="submit">Submit</button>
  </div>
);

const MultiStepForm = () => {
  const [step, setStep] = useState(1);

  const nextStep = () => setStep(step + 1);
  const previousStep = () => setStep(step - 1);

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log('Form submitted');
  };

  return (
    <form onSubmit={handleSubmit}>
      {step === 1 && <Step1 next={nextStep} />}
      {step === 2 && <Step2 next={nextStep} previous={previousStep} />}
      {step === 3 && <Step3 previous={previousStep} />}
    </form>
  );
};

const App = () => {
  return (
    <div>
      <h1>Multi-Step Form</h1>
      <MultiStepForm />
    </div>
  );
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

13. یک لیست مجازی را پیاده سازی کنید

مسئله:
یک مؤلفه لیست مجازی ایجاد کنید که به طور کارآمد لیست بزرگی از موارد را ارائه کند، فقط مواردی را که در پنجره نمایان قابل مشاهده هستند رندر کند.

راه حل:

import React, { useState, useRef, useCallback } from 'react';

const VirtualizedList = ({ items, itemHeight, height }) => {
  const [scrollTop, setScrollTop] = useState(0);
  const totalHeight = items.length * itemHeight;
  const viewportRef = useRef(null);

  const handleScroll = () => {
    setScrollTop(viewportRef.current.scrollTop);
  };

  const startIndex = Math.floor(scrollTop / itemHeight);
  const endIndex = Math.min(items.length - 1, startIndex + Math.ceil(height / itemHeight));

  const visibleItems = items.slice(startIndex, endIndex + 1).map((item, index) => (
    <div key={index} style={{ height: itemHeight }}>
      {item}
    </div>
  ));

  return (
    <div ref={viewportRef} onScroll={handleScroll} style={{ height, overflowY: 'auto', position: 'relative' }}>
      <div style={{ height: totalHeight, position: 'relative' }}>
        <div style={{ position: 'absolute', top: startIndex * itemHeight, width: '100%' }}>
          {visibleItems}
        </div>
      </div>
    </div>
  );
};

const App = () => {
  const items = Array.from({ length: 1000 }, (_, i) => `Item ${i + 1}`);

  return (
    <div>
      <VirtualizedList items={items} itemHeight={50} height={400} />
    </div>
  );
};

export default App;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

14. یک مؤلفه فرم قابل استفاده مجدد با اعتبارسنجی ایجاد کنید

مسئله:
یک جزء فرم قابل استفاده مجدد بسازید که حالت فرم و اعتبارسنجی فیلدهای فرم های مختلف را کنترل می کند.
راه حل:

import React, { useState } from 'react';

const useForm = (initialValues, validate) => {
  const [values, setValues] = useState(initialValues);
  const [errors, setErrors] = useState({});

  const handleChange = (e) => {
    const { name, value } = e.target;
    setValues({ ...values, [name]: value });

    const error = validate({ [name]: value });
    setErrors({ ...errors, [name]: error[name] });
  };

  const handleSubmit = (callback) => (e) => {
    e.preventDefault();
    const validationErrors = validate(values);
    setErrors(validationErrors);

    if (Object.keys(validationErrors).length === 0) {
      callback();
    }
  };

  return { values, errors, handleChange, handleSubmit };
};

const Form = ({ onSubmit }) => {
  const initialValues = { username: '', email: '' };

  const validate = (values) => {
    const errors = {};
    if (!values.username) {
      errors.username = 'Username is required';
    }
    if (!values.email) {
      errors.email = 'Email is required';
    } else if (!/\S+@\S+\.\S+/.test(values.email)) {
      errors.email = 'Email is invalid';
    }
    return errors;
  };

  const { values, errors, handleChange, handleSubmit } = useForm(initialValues, validate);

  return (
    <form onSubmit={handleSubmit(() => onSubmit(values))}>
      <div>
        <label>Username</label>
        <input name="username" value={values.username} onChange={handleChange} />
        {errors.username && <p>{errors.username}</p>}
      </div>
      <div>
        <label>Email</label>
        <input name="email" value={values.email} onChange={handleChange} />
        {errors.email && <p>{errors.email}</p>}
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};

const App = () => {
  const handleSubmit = (values) => {
    console.log('Form Submitted:', values);
  };

  return (
    <div>
      <h1>Reusable Form</h1>
      <Form onSubmit={handleSubmit} />
    </div>
  );
};

export default App;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

15. یک فرم پویا را با آرایه های میدانی پیاده سازی کنید

مسئله:
یک فرم پویا ایجاد کنید که به کاربران امکان می دهد فیلدها را به صورت پویا اضافه یا حذف کنند.
راه حل:

import React, { useState } from 'react';

const DynamicForm = () => {
  const [fields, setFields] = useState([{ value: '' }]);

  const handleChange = (index, event) => {
    const newFields = fields.slice();
    newFields[index].value = event.target.value;
    setFields(newFields);
  };

  const handleAdd = () => {
    setFields([...fields, { value: '' }]);
  };

  const handleRemove = (index) => {
    const newFields = fields.slice();
    newFields.splice(index, 1);
    setFields(newFields);
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log('Form submitted:', fields);
  };

  return (
    <form onSubmit={handleSubmit}>
      {fields.map((field, index) => (
        <div key={index}>
          <input
            type="text"
            value={field.value}
            onChange={(e) => handleChange(index, e)}
          />
          <button type="button" onClick={() => handleRemove(index)}>Remove</button>
        </div>
      ))}
      <button type="button" onClick={handleAdd}>Add Field</button>
      <button type="submit">Submit</button>
    </form>
  );
};

const App = () => {
  return (
    <div>
      <h1>Dynamic Form</h1>
      <DynamicForm />
    </div>
  );
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

16. یک Context API برای Global State پیاده سازی کنید

مسئله:
با استفاده از React’s Context API یک حالت جهانی ایجاد کنید تا وضعیت پست ها را در سراسر برنامه مدیریت کنید.
راه حل:

import React, { createContext, useContext, useReducer } from 'react';

// Create a Context for the posts
const PostsContext = createContext();

// Define a reducer to manage the state of posts
const postsReducer = (state, action) => {
  switch (action.type) {
    case 'ADD_POST':
      return [...state, action.payload];
    case 'REMOVE_POST':
      return state.filter((post, index) => index !== action.payload);
    default:
      return state;
  }
};

// Create a provider component
const PostsProvider = ({ children }) => {
  const [posts, dispatch] = useReducer(postsReducer, []);

  return (
    <PostsContext.Provider value={{ posts, dispatch }}>
      {children}
    </PostsContext.Provider>
  );
};

// Create a custom hook to use the PostsContext
const usePosts = () => {
  return useContext(PostsContext);
};

const App = () => {
  const { posts, dispatch } = usePosts();

  const addPost = () => {
    dispatch({ type: 'ADD_POST', payload: 'New Post' });
  };

  const removePost = (index) => {
    dispatch({ type: 'REMOVE_POST', payload: index });
  };

  return (
    <div>
      <button onClick={addPost}>Add Post</button>
      <ul>
        {posts.map((post, index) => (
          <li key={index}>
            {post} <button onClick={() => removePost(index)}>Remove</button>
          </li>
        ))}
      </ul>
    </div>
  );
};

const Root = () => (
  <PostsProvider>
    <App />
  </PostsProvider>
);

export default Root;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

17. یک هوک سفارشی ایجاد کنید

مسئله:
یک قلاب سفارشی ایجاد کنید که داده ها را از یک API واکشی و ذخیره می کند.
راه حل:

import { useState, useEffect } from 'react';

const useFetch = (url) => {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    let isMounted = true;
    fetch(url)
      .then((response) => response.json())
      .then((data) => {
        if (isMounted) {
          setData(data);
          setLoading(false);
        }
      })
      .catch((error) => {
        if (isMounted) {
          setError(error);
          setLoading(false);
        }
      });

    return () => {
      isMounted = false;
    };
  }, [url]);

  return { data, loading, error };
};

const App = () => {
  const { data, loading, error } = useFetch('https://api.example.com/data');

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error: {error.message}</p>;

  return (
    <ul>
      {data.map((item) => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
};

export default App;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

18. با کشیدن و رها کردن، یک لیست کار بسازید

مسئله:
یک برنامه فهرست کار با قابلیت کشیدن و رها کردن برای مرتب کردن مجدد موارد ایجاد کنید.

راه حل:

import React, { useState } from 'react';
import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';

const TodoList = () => {
  const [todos, setTodos] = useState([
    'Learn React',
    'Learn Redux',
    'Build a React App',
  ]);

  const handleOnDragEnd = (result) => {
    if (!result.destination) return;

    const reorderedTodos = Array.from(todos);
    const [removed] = reorderedTodos.splice(result.source.index, 1);
    reorderedTodos.splice(result.destination.index, 0, removed);

    setTodos(reorderedTodos);
  };

  return (
    <DragDropContext onDragEnd={handleOnDragEnd}>
      <Droppable droppableId="todos">
        {(provided) => (
          <ul {...provided.droppableProps} ref={provided.innerRef}>
            {todos.map((todo, index) => (
              <Draggable key={todo} draggableId={todo} index={index}>
                {(provided) => (
                  <li ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}>
                    {todo}
                  </li>
                )}
              </Draggable>
            ))}
            {provided.placeholder}
          </ul>
        )}
      </Droppable>
    </DragDropContext>
  );
};

const App = () => {
  return (
    <div>
      <h1>Todo List with Drag-and-Drop</h1>
      <TodoList />
    </div>
  );
};

export default App;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

19. یک تایمر شمارش معکوس ایجاد کنید

مسئله:
یک جزء تایمر شمارش معکوس ایجاد کنید که از یک زمان معین شمارش معکوس می کند.
راه حل:

import React, { useState, useEffect } from 'react';

const CountdownTimer = ({ initialSeconds }) => {
  const [seconds, setSeconds] = useState(initialSeconds);

  useEffect(() => {
    const timer = setInterval(() => {
      setSeconds((prevSeconds) => prevSeconds - 1);
    }, 1000);

    return () => clearInterval(timer);
  }, []);

  return (
    <div>
      <h1>Countdown Timer</h1>
      <p>{seconds} seconds remaining</p>
    </div>
  );
};

const App = () => {
  return (
    <div>
      <CountdownTimer initialSeconds={60} />
    </div>
  );
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

20. Formik را با Yup Validation پیاده سازی کنید

مسئله:
با استفاده از Formik و Yup یک فرم با اعتبارسنجی ایجاد کنید.
راه حل:

import React from 'react';
import { Formik, Form, Field, ErrorMessage } from 'formik';
import * as Yup from 'yup';

const validationSchema = Yup.object().shape({
  username: Yup.string().required('Username is required'),
  email: Yup.string().email('Invalid email').required('Email is required'),
});

const App = () => {
  return (
    <div>
      <h1>Formik Form with Yup Validation</h1>
      <Formik
        initialValues={{ username: '', email: '' }}
        validationSchema={validationSchema}
        onSubmit={(values) => {
          console.log('Form Submitted', values);
        }}
      >
        {() => (
          <Form>
            <div>
              <label>Username</label>
              <Field name="username" />
              <ErrorMessage name="username" component="div" />
            </div>
            <div>
              <label>Email</label>
              <Field name="email" type="email" />
              <ErrorMessage name="email" component="div" />
            </div>
            <button type="submit">Submit</button>
          </Form>
        )}
      </Formik>
    </div>
  );
};

export default App;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

این چالش‌های کدنویسی مفاهیم و تکنیک‌های مختلف React، از مدیریت حالت و هوک‌ها گرفته تا کامپوننت‌ها و کتابخانه‌های سفارشی را پوشش می‌دهند. هر چالش یک مشکل و یک راه حل ارائه می دهد و به شما کمک می کند تا مهارت های عملی ایجاد کنید که می تواند در پروژه های دنیای واقعی به کار رود. چه برای مصاحبه آماده شوید و چه فقط به دنبال بهبود دانش React خود باشید، این چالش ها راهی عالی برای تمرین و یادگیری هستند. کد نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا