中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Remix表單常用方法有哪些

發布時間:2023-03-24 13:57:03 來源:億速云 閱讀:244 作者:iii 欄目:開發技術

這篇文章主要介紹“Remix表單常用方法有哪些”,在日常操作中,相信很多人在Remix表單常用方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Remix表單常用方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    Remix 的三種表單

    • 原生表單

    • Remix 提供的表單組件

    • Remix fetcher 表單

    回顧表單基礎

    • 提交行為:enter 按鍵(只有一個 input type="txt")/使用具有 type=sumbit 的按鈕

    • method 不指定時,form 默認使用 get 方法

    • form 提交后默認行為是跳轉到 action 對應的頁面

    • 表單的提交方式是 content-type = x-www-form-unlencoded

    表單提交的形式

    • 使用 html 標簽屬性,自動提交

    • 手動提交:鉤子函數 sumit 提交方式, fetcher.sumbit 提交方式

    阻止跳轉

    通常我們不希望提交表單后發生跳轉行為:使用事件阻止函數進行阻止。

    const handleClick = (e) => {
     e.preventDefault()
    }

    Remix 提供的表單組件

    import { Form } from "@remix-run/react";

    一個簡單的 demo

    import { json } from "@remix-run/node";
    import { Form } from "@remix-run/react";
    export async function action () {
      let data = {
        a: 'this is data'
      }
      return json({
        ...data
      })
    }
    export default function Index() {
      return (
        <div>
          <div>Remix Form</div>
          <Form method="post">
            <input type="text" name="a-name-remix"/>
            <button type="submit">submit-remix</button>
          </Form>
        </div>
      );
    }

    注意:Form 組件沒有定義 method 的時候,點擊提交按鈕沒有任何效果。一般添加 method='post'。添加之后就可以正常提交 post 請求表單。

    使用鉤子函數提交函數

    import { json } from "@remix-run/node";
    import { Form, useSubmit } from "@remix-run/react";
    export async function action () {
      let data = {
        a: 'this is data'
      }
      console.log(data)
      return json({
        ...data
      })
    }
    export default function Index() {
      const submit = useSubmit();
      const handleClick = (e) => {
        e.preventDefault()
        submit(e.target, {
          method: 'post'
        })
      }
      return (
        <div>
          <div>Remix Form</div>
          <Form onSubmit={handleClick}>
            <input type="text" name="a-name-remix"/>
            <button type="submit">submit-remix</button>
          </Form>
        </div>
      );
    }

    注意手動提交之前先要阻止事件默認行為。

    Remix fetcher 表單

    一個簡單的 demo

    import { json } from "@remix-run/node";
    import { useFetcher } from "@remix-run/react";
    export async function action () {
      let data = {
        a: 'this is data'
      }
      return json({
        ...data
      })
    }
    export default function Index() {
      const fetcher = useFetcher();
      return (
        <div>
          <div>Remix Form</div>
          <fetcher.Form method="post">
            <input type="text" name="a-name-remix"/>
            <button type="submit">submit-remix</button>
          </fetcher.Form>
        </div>
      );
    }

    Form 添加 post 方法,點擊提交按鈕,自動提交到當前 Route 模塊中的 action 方法中。

    沒有定義

    • method 屬性

    • action 屬性

    沒有定義以上兩個屬性,提交代碼的時候,提交函數不會執行

    使用 fetcher.submit 函數提交

    import { json } from "@remix-run/node";
    import { useFetcher } from "@remix-run/react";
    export async function action () {
      let data = {
        a: 'this is data'
      }
      console.log(data)
      return json({
        ...data
      })
    }
    export default function Index() {
      const fetcher = useFetcher();
      const onSubmit = (e) => {
        e.preventDefault();
        fetcher.submit(e.target, {
          method: 'post',
          action: '/main/form'
        })
      }
      return (
        <div>
          <div>Remix Form</div>
          <fetcher.Form onSubmit={onSubmit}>
            <input type="text" name="a-name-remix"/>
            <button type="submit">submit-remix</button>
          </fetcher.Form>
        </div>
      );
    }

    onSubmit 中首先就是要解決提交的默認行為問題,阻止了表單的默認行為之后,使用 submit 方法其實與鉤子函數 submit 是一樣的。

    useFetcher 的其他內容

    • state 表示當前的條狀態 idle/submitting/loading

    • data 表示 action 中響應的數據

    • load 函數表示從路由中讀取 action 函數返回的數據

    • submission 是可能構建 optimistic UI

    其他的表單

    • 一個使用 useSubmit 鉤子函數手動提交 antd 表單的例子

    import { Form, Input, Button } from "antd";
    import { useSubmit } from "@remix-run/react";
    export async function action() {
      return {
        a: 1
      }
    }
    export default function () {
      const submit = useSubmit();
      const handleClick = (data) => {
        submit(data, {
          method: "post",
        });
      };
      return (
        <div>
          <Form onFinish={handleClick}>
            <Form.Item name="name">
              <Input />
            </Form.Item>
            <Button htmlType="submit" >
              提交
            </Button>
          </Form>
        </div>
      );
    }
    • 一個手動提交 antd pro-component 表單的例子

    import { Button } from "antd";
    import { ProForm, ProFormText } from '@ant-design/pro-components'
    import { useSubmit } from "@remix-run/react";
    export async function action() {
      return {
        a: 1
      }
    }
    export default function () {
      const submit = useSubmit();
      const handleClick = async (data: any) => {
        submit(data, {
          method: "post",
        });
        return false
      };
      return (
        <div>
          <ProForm onFinish={handleClick}>
            <ProFormText name="name" />
            <Button htmlType="submit" >
              提交
            </Button>
          </ProForm>
        </div>
      );
    }

    到此,關于“Remix表單常用方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    临城县| 唐山市| 来安县| 称多县| 屏南县| 雷山县| 息烽县| 鲁甸县| 奉节县| 琼海市| 霍山县| 汨罗市| 阿城市| 新巴尔虎右旗| 综艺| 凯里市| 晋江市| 桦南县| 外汇| 三门峡市| 公主岭市| 安达市| 昭平县| 鄄城县| 阿坝| 湖北省| 隆昌县| 昔阳县| 西昌市| 福海县| 广宗县| 富锦市| 常山县| 洞口县| 孝感市| 宜州市| 仪陇县| 资兴市| 塔河县| 阿拉善盟| 长治县|