reactjs - 如何仅在输入中搜索时显示数据?

标签 reactjs react-hooks

我正在学习 React,并正在制作一个简单的应用程序,允许用户通过 api 搜索国家/地区。 我已成功获取 api 并将其设置为某种状态,并创建了一个用于在文本输入中进行搜索的过滤器组件。 但是,我想在用户输入搜索输入之前不显示任何内容,然后显示与输入的字母匹配的国家/地区。 最常用的方法是什么?

const App = () => {
  const [countries, setCountry] = useState([]) 
  const [search, setSearch] = useState('')


  useEffect(() => {
    console.log('effect')
    axios
    .get(`https://restcountries.eu/rest/v2/all`)
    .then(response => {
      console.log(response,'promise fulfiled')
      setCountry(response.data)
    })
  }, [])

  const handleSearch = (e) => {
    setSearch(e.target.value)
  }

  const filter = countries.filter(country =>
    country.name.toLowerCase().includes(search.toLowerCase()) 
    );


  return (
    <div className="App">
    Search Country: 
    <input type='text' onChange={handleSearch}/>
    <Country filter={filter} />
    </div>
  );
}
const Country = ({filter}) => {
    return(
        <ul style={{listStyle: 'none'}}>
        {
        filter.map(country =>
          <li key={country.name}>
            {country.name}
          </li>)
        }
      </ul>
    )

这是当前代码,但它显示了 API 中的所有国家/地区。我想在用户在输入框中键入内容之前不显示任何国家/地区。 谢谢。

最佳答案

只需对 <Country /> 进行条件渲染即可.

仅显示国家/地区列表,如果 search已提供。

{ search && <Country filter={filter} /> }

Demo

关于reactjs - 如何仅在输入中搜索时显示数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262808/

相关文章:

javascript - 无法将 Bootstrap 或 React-Bootstrap 样式应用于使用 create-react-app 创建的应用程序

reactjs - react Hook : how to access props within "mount" useEffect & not throw linting warning

reactjs - useRef() 而不是仅仅声明一个变量有什么优点?

javascript - react 自定义钩子(Hook) : can't get an async function

javascript - 如何使用 React-query 通过按钮触发请求?

reactjs - React Hook Form - formState 未定义

javascript - reactjs 如何使用对象设置样式而不是使用内联样式?

javascript - 是的,当用户单击提交按钮时,不会验证复选框

reactjs - 我的数组计数器落后了 1 步。我该如何解决这个问题?

reactjs - enzyme `mount` 不呈现 `Route` 元素