• Как реализовать фильтрацию с помощью checkbox?

    0xD34F
    @0xD34F Куратор тега React
    как вернуть к первоначальному состоянию когда unchecked не понимаю

    Очевидно, устанавливать в качестве результата фильтрации не его текущее значение, а полные данные.

    Ну и ещё неплохо бы сделать так, чтобы фильтрация по введённой строке не отменяла фильтрацию по чекбоксу - унесите их в один общий эффект, чтобы они работали совместно:

    function Posts() {
      const [ posts, setPosts ] = useState([]);
      const [ filteredPosts, setFilteredPosts ] = useState([]);
      const [ search, setSearch ] = useState('');
      const [ checkbox, setCheckbox ] = useState(false);
    
      useEffect(() => {
        axios
          .get('https://jsonplaceholder.typicode.com/posts')
          .then(r => setPosts(r.data));
      }, []);
    
      useEffect(() => {
        let filtered = posts;
    
        if (search) {
          const s = search.toLowerCase();
          filtered = filtered.filter(n => n.title.toLowerCase().includes(s));
        }
    
        if (checkbox) {
          filtered = filtered.filter(n => n.userId === 10);
        }
    
        setFilteredPosts(filtered);
      }, [ posts, search, checkbox ]);
    
      return (
        <>
          <input
            type="text"
            placeholder="Search for article..."
            value={search}
            onChange={e => setSearch(e.target.value)}
          />
          <label>
            User Id 10
            <input
              type="checkbox"
              checked={checkbox}
              onChange={e => setCheckbox(e.target.checked)}
            />
          </label>
    
          <ul>
            {filteredPosts.map(n => (
              <li key={n.id}>
                <div>{n.userId}</div>
                <div>{n.title}</div>
                <div>{n.body}</div>
              </li>
            ))}
          </ul>
        </>
      );
    }
    Ответ написан
    1 комментарий