从按钮调用时反应js myfn不是函数

react js myfn is not a function when called from a button

我刚刚开始学习 React js,这是我的第一个 React js 应用程序。我正在使用 api 来获取数据。到目前为止它有效,但现在我想向从搜索栏组件获取的功能添加一个搜索关键字。

这是我的代码:

SearchBar.js

const SearchBar = ({ getUsers }) => {
  return (
    <div className="is-flex flex-align-items-center mb-3">
      <input type="text" id="query" className="input search-input" placeholder="search keyword"/>
      <Button className="search-btn ps-3 pe-3" 
      onClick={() => getUsers(document.querySelector('#query').value)}>
        <FontAwesomeIcon icon={faMagnifyingGlass} />
      </Button>
    </div>
  );
};

MasterUser.js

import { useState, useEffect } from "react";
import SearchBar from "./SearchBar";

const MasterUser = () => {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    getUsers();
  }, []);

  const getUsers = async (query='') => {
    console.log('get users', query);
    try {
      let myurl = 'http://localhost:8080/users';
      const response = await fetch(myurl);
      const data = await response.json();
      setUsers(data);
      setIsLoading(false);
    } catch (e) {
      console.log(e.getMessage());
    }
  };

  return (
    <div>
      <SearchBar onClick={getUsers}/>
    </div>
  );
};

当应用程序加载时,控制台日志显示 get users <empty string> 并且它 returns 所有用户都符合预期,但是当我点击搜索按钮(放大镜)时它给出了一个错误 Uncaught TypeError: getUsers is not a function.

感谢任何帮助..

使您的 searchBar 组件更具反应性,就像这样

const SearchBar = ({ getUsers }) => {
const [searchValue,setSearchValue]=useState('');
  return (
    <div className="is-flex flex-align-items-center mb-3">
      <input type="text" id="query" className="input search-input" placeholder="search keyword" value={searchValue} onChange={(e)=>setSearchValue(e.target.value)}/>
      <Button className="search-btn ps-3 pe-3" 
      onClick={() => getUsers(searchValue)}>
        <FontAwesomeIcon icon={faMagnifyingGlass} />
      </Button>
    </div>
  );
};
  <SearchBar onClick={getUsers}/>

您将道具命名为 onClick 而不是 getUsers。这就是您收到该错误的原因。


是的,使用选择器(例如 document.querySelector('#query').value)访问 dom 元素值也不是典型的反应。了解 controlled 个表单元素(在状态中保存表单元素值)。