Skip to content

为什么选择 react-simplikit ​

在众多基于 React 的库当中,为什么你应该选择 react-simplikit?让我们一起看看我们坚持的核心价值,理解为什么使用 react-simplikit 就等于用 React 的方式编写 React 代码。

声明式接口 ​

在熟悉的 React 代码中,只添加所需的功能。在这个图书搜索示例中,输入内容立即更新,列表则在停止输入 300 毫秒后更新。

两个示例都筛选同一个本地列表,无需服务器。渲染 <BookSearch />,然后尝试输入 React。如果使用支持 Server Components 的框架,请将示例放在 Client Component('use client')中。

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

const books = ['React Handbook', 'TypeScript Guide', 'CSS Patterns'];

function BookSearch() {
  const [query, setQuery] = useState('');
  const [searchQuery, setSearchQuery] = useState(query);

  useEffect(
    function debounceSearchQuery() {
      const timeoutId = setTimeout(() => setSearchQuery(query), 300);
      return () => clearTimeout(timeoutId);
    },
    [query]
  );

  const results = books.filter(book =>
    book.toLowerCase().includes(searchQuery.trim().toLowerCase())
  );

  return (
    <div>
      <label>
        Search books
        <input value={query} onChange={event => setQuery(event.target.value)} />
      </label>
      <p role="status">{results.length} results</p>
      <ul>
        {results.map(book => (
          <li key={book}>{book}</li>
        ))}
      </ul>
    </div>
  );
}
tsx
import { useState } from 'react';
import { useDebouncedValue } from 'react-simplikit';

const books = ['React Handbook', 'TypeScript Guide', 'CSS Patterns'];

function BookSearch() {
  const [query, setQuery] = useState('');
  const searchQuery = useDebouncedValue(query, 300);

  const results = books.filter(book =>
    book.toLowerCase().includes(searchQuery.trim().toLowerCase())
  );

  return (
    <div>
      <label>
        Search books
        <input value={query} onChange={event => setQuery(event.target.value)} />
      </label>
      <p role="status">{results.length} results</p>
      <ul>
        {results.map(book => (
          <li key={book}>{book}</li>
        ))}
      </ul>
    </div>
  );
}

通过 useDebouncedValue,你可以将 searchQuery 声明为延迟反映 query 的值。输入状态仍由 useState 管理,只需一行代码即可派生出用于筛选列表的值。Hook 负责管理计时器,并在组件卸载时取消尚未执行的更新。

更小的包体积 ​

对 Web 服务来说,快速的响应时间至关重要。正因如此,对于用来构建 Web 服务的库 react-simplikit 而言,更小的包体积非常重要。react-simplikit 一直在努力,无论现在还是将来都提供尽可能小的包体积。

与 react-use 相比,react-simplikit 的体积最多小约 89%:

react-simplikitreact-use差异
Unpacked Size237 kB454 kB-47.8%
Minified Size8.7 kB78.2 kB-88.9%
Gzipped Size2.9 kB22 kB-86.9%
每个函数的平均体积
(Minified Size)
318.2 byte696.3 byte-54.3%

基于 MIT 许可证发布。