如何在React中基于表单提交应用useEffect?

我尖叫

我正在尝试根据表单提交在功能组件内进行API调用:

const SearchForm = () => {
    const [keywords, setKeywords] = useState('')
    const [fetchedData, setFetchedData] = useState('')

    const handleSubmit = (e) => {
        e.preventDefault();
        useEffect(() => {
            async function fetchData() {
                const {data} = await axios.post('http://127.0.0.1:8000/api/posts/', keywords)
                setFetchedData(data);
            }
            fetchData()
        })
    }

    return (
        <div>
            <form onSubmit={ handleSubmit }>
                <div className='input-field'>
                <input placeholder="Search whatever you wish" 
                    type="text"
                    value={keywords}
                    onChange={(e) => setKeywords(e.target.value)}
                />
                </div>
            </form>
        </div>
    )
}

但是,当我尝试此操作时,出现以下错误:

React Hook "useEffect" is called in function "handleSubmit" which is neither a React function component or a custom React Hook function  react-hooks/rules-of-hooks

我该如何进行?

凯雷姆·阿塔姆(Kerem Atam)

因为不是useEffect用来的。您也不需要在处理程序中调用它。

文档中

仅从React函数调用挂钩而不从常规JavaScript函数调用挂钩。相反,您可以:

React从React函数组件中调用Hook。

custom从自定义挂钩中调用挂钩(我们将在下一页中了解它们)。通过遵循此规则,可以确保组件的所有状态逻辑从其源代码中清晰可见。

如果您希望在功能组件上读取数据,可以使用useEffect:

  useEffect(() => {
    fetchData()
  }, [])

并且您希望通过单击按钮触发获取呼叫:

const handleSubmit = e => {
    e.preventDefault()
    fetchData()
  }

因此,整个代码将如下所示:

const SearchForm = () => {
  const [keywords, setKeywords] = useState('')
  const [fetchedData, setFetchedData] = useState('')

  async function fetchData() {
    const { data } = await axios.post(
      'http://127.0.0.1:8000/api/posts/',
      keywords
    )
    setFetchedData(data)
  }

  useEffect(() => {
    fetchData()
  }, [])

  const handleSubmit = e => {
    e.preventDefault()
    fetchData()
  }

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <div className="input-field">
          <input
            placeholder="Search whatever you wish"
            type="text"
            value={keywords}
            onChange={e => setKeywords(e.target.value)}
          />
        </div>
      </form>
    </div>
  )
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在drupal中破坏表单提交

来自分类Dev

提交表单后如何在Flask应用中显示确认模式?

来自分类Dev

React 中的表单提交

来自分类Dev

如何在Google表单/表格中编辑表单提交的回复?

来自分类Dev

如何在react.js表单中创建几个提交按钮?

来自分类Dev

从React中的API过滤数组数据时,如何在表单提交中使用startsWith?

来自分类Dev

在本机提交后如何在useEffect中调用异步函数?

来自分类Dev

如何在 React 中包含基于状态的表单字段属性?

来自分类Dev

如何基于symfony2中基于用户提交的数据进行条件表单验证?

来自分类Dev

如何在Flask中获取提交表单的名称?

来自分类Dev

如何在Ember中从表单提交过渡到路径?

来自分类Dev

如何在AngularJS中以编程方式触发表单提交?

来自分类Dev

如何在symfony2中提交表单ajax?

来自分类Dev

提交后如何在Angular中异步验证表单?

来自分类Dev

如何在提交ANGULAR 2中重置表单验证

来自分类Dev

如何在页面访问中自动提交Rails表单

来自分类Dev

如何在Capybara中单击表单提交按钮

来自分类Dev

如何在PHP中的按钮提交上保存表单

来自分类Dev

如何在Codeigniter中获取提交的表单数据?

来自分类Dev

如何在Laravel中通过Ajax提交表单

来自分类Dev

如何在Rails提交中设置多个默认表单值?

来自分类Dev

如何在vue-cli中自动提交表单?

来自分类Dev

表单提交后如何在Flask中创建动态路线?

来自分类Dev

用户提交表单时如何在msql中增加时间?

来自分类Dev

提交表单后如何在Facebook中自动共享

来自分类Dev

如何在Django中处理多种表单提交

来自分类Dev

如何在MVC中测试表单提交

来自分类Dev

如何在表单中仅提交1个输入字段?

来自分类Dev

如何在AUI脚本的Submit事件中停止表单提交

Related 相关文章

  1. 1

    如何在drupal中破坏表单提交

  2. 2

    提交表单后如何在Flask应用中显示确认模式?

  3. 3

    React 中的表单提交

  4. 4

    如何在Google表单/表格中编辑表单提交的回复?

  5. 5

    如何在react.js表单中创建几个提交按钮?

  6. 6

    从React中的API过滤数组数据时,如何在表单提交中使用startsWith?

  7. 7

    在本机提交后如何在useEffect中调用异步函数?

  8. 8

    如何在 React 中包含基于状态的表单字段属性?

  9. 9

    如何基于symfony2中基于用户提交的数据进行条件表单验证?

  10. 10

    如何在Flask中获取提交表单的名称?

  11. 11

    如何在Ember中从表单提交过渡到路径?

  12. 12

    如何在AngularJS中以编程方式触发表单提交?

  13. 13

    如何在symfony2中提交表单ajax?

  14. 14

    提交后如何在Angular中异步验证表单?

  15. 15

    如何在提交ANGULAR 2中重置表单验证

  16. 16

    如何在页面访问中自动提交Rails表单

  17. 17

    如何在Capybara中单击表单提交按钮

  18. 18

    如何在PHP中的按钮提交上保存表单

  19. 19

    如何在Codeigniter中获取提交的表单数据?

  20. 20

    如何在Laravel中通过Ajax提交表单

  21. 21

    如何在Rails提交中设置多个默认表单值?

  22. 22

    如何在vue-cli中自动提交表单?

  23. 23

    表单提交后如何在Flask中创建动态路线?

  24. 24

    用户提交表单时如何在msql中增加时间?

  25. 25

    提交表单后如何在Facebook中自动共享

  26. 26

    如何在Django中处理多种表单提交

  27. 27

    如何在MVC中测试表单提交

  28. 28

    如何在表单中仅提交1个输入字段?

  29. 29

    如何在AUI脚本的Submit事件中停止表单提交

热门标签

归档