使用react-router重定向表单提交

坦德夫

输入搜索词(名称,电子邮件,用户名)时,我希望页面根据搜索值从所有卡中过滤出一张卡。我认为,当用户按下Enter键时,我们将需要重定向到新页面以显示卡片。

我有searchbar和用户组件的代码,这些代码将负责显示单个用户卡。我们是否需要使用react-router的Redirect功能来实现这一点?我一直在努力如何实现它,因为还需要将props(searchItem)传递给User组件。

在此处输入图片说明

Searchbar.jsx

import React, { useState } from "react";
import UserList from "./UserList";
import User from "./Components/User";
import { Link, Redirect } from "react-router-dom";

const SearchBar = () => {
  const [searchItem, setSearchItem] = useState("");

  const handleChange = (e) => {
    console.log(e.target.value);
    setSearchItem(e.target.value);
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    setSearchItem("");
  };

  return (
    <>
      <div className="searchbar">
        <form onSubmit={handleSubmit}>
          <input
            name="name"
            placeholder="Enter Name, Email or Username to Search"
            type="text"
            className="search"
            value={searchItem}
            onChange={handleChange}
          />
        </form>
      </div>
      <UserList />
    </>
  );
};

export default SearchBar;

User.jsx

import React from "react";
import Card from "./Card";

const User = (props) => {
  return (
    <Card
      key={props.id}
      name={props.name}
      email={props.email}
      website={props.website}
      phone={props.phone}
    />
  );
};

export default User;

UserList.jsx

import React, { useState, useEffect } from "react";
import Card from "./Components/Card";

const UserList = ({ searchItem }) => {
  const [data, setData] = useState([]);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then((response) => response.json())
      .then((json) => {
        console.log(json);

        const newData = json.map((object) => ({
          id: object.id,
          email: object.email,
          website: object.website,
          phone: object.phone,
          name: object.name,
        }));

        // previousData is an empty array and the newData consists of all the users
        // using the spread operator, we copy the newData into the previousData
        setData((previousData) => [...previousData, ...newData]);
      });
  }, []);

  return (
    <>
      <div className="container">
        {data.map((info) => {
          return (
            <Card
              key={info.id}
              name={info.name}
              email={info.email}
              website={info.website}
              phone={info.phone}
            />
          );
        })}
      </div>
    </>
  );
};

export default UserList;
巴斯·范·德·林登

我认为您无需在此处使用react-router即可实现此目的。

您想要的搜索类型决定了您可以采用的方法。您是要在每次按键时还是仅在表单提交时对卡片进行过滤?

当前,您将这两种方法混合使用,因为您的form元素带有onSubmit,但您的input元素也带有onChange(不受控制和受控)。

这是实时搜索,受控组件方法的简化示例:

const User = (props) => {
  return <p>{props.name}</p>;
};

const UserList = ({ searchItem }) => {
  const [data, setData] = useState([]);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then((response) => response.json())
      .then((json) => {
        console.log(json);

        const newData = json.map((object) => ({
          id: object.id,
          email: object.email,
          website: object.website,
          phone: object.phone,
          name: object.name,
        }));

        setData(newData);
      });
  }, []);

  const filteredUsers = data.filter((user) => {
    return user.name.includes(searchItem);
  });

  return filteredUsers.map((user) => {
    return <User key={user.id} name={user.name} />;
  });
};

const SearchBar = () => {
  const [searchItem, setSearchItem] = useState("");

  const handleChange = (e) => {
    console.log(e.target.value);
    setSearchItem(e.target.value);
  };

  return (
    <>
      <div className="searchbar">
        <form onSubmit={(e) => e.preventDefault()}>
          <input
            name="name"
            placeholder="Enter Name, Email or Username to Search"
            type="text"
            className="search"
            value={searchItem}
            onChange={handleChange}
          />
        </form>
      </div>
      <UserList searchItem={searchItem} />
    </>
  );
};

对于不受控制的方法,过滤器提示可以保持不变,但是您可以删除上的valueonChange道具,input并使用handleSubmit函数来设置searchItem要获得输入的值,您需要使用此方法使用ref。以获取更多信息。

沙箱示例

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用react-router重定向表单提交

来自分类Dev

在提交时重定向React表单组件。React Router v5.1

来自分类Dev

提交表单React后如何重定向

来自分类Dev

React Router Redirect - 表单提交和重定向尝试加载 HomeRoute

来自分类Dev

使用表单提交重定向延迟

来自分类Dev

使用React提交表单后如何重定向用户

来自分类Dev

使用AutoForm&Iron Router在Meteor上检查插入是否成功后,用于重定向提交表单的标准模式?

来自分类Dev

使用 React Router 重定向

来自分类Dev

使用纯JavaScript提交表单后重定向

来自分类Dev

如何使用React Router的重定向功能?

来自分类Dev

使用React Router组件进行重定向

来自分类Dev

重定向到表单提交页面并在新页面中使用表单数据

来自分类Dev

使用保存的表单参数提交表单时,rails重定向到编辑页面

来自分类Dev

在React前端中提交表单时重定向和刷新页面

来自分类Dev

使用jQuery进度栏提交表单后重定向到另一个页面

来自分类Dev

提交表单后,我应该使用301、302或303重定向吗?

来自分类Dev

引导程序验证成功后,如何使用$ .post提交表单而不进行页面重定向?

来自分类Dev

在表单上使用<span>按钮提交,重定向到新站点

来自分类Dev

使用javascript从特定选中的单选按钮提交表单时创建页面重定向

来自分类Dev

使用Contact Form 7 WordPress插件无法进行表单提交重定向

来自分类Dev

如何使用onbeforeunload作为后退按钮,但防止表单提交和内部页面重定向

来自分类Dev

提交表单后如何使用参数重定向到 PHP CodeIgniter 中的列表视图页面?

来自分类Dev

使用 Ajax 请求在 DIV 中加载的 Ajax 表单在提交时重定向 - Framework7

来自分类Dev

使用旧输入数据重新加载或提交表单后重定向到相同的ajax页面

来自分类Dev

使用react-router登录后自动重定向

来自分类Dev

如何使用react-router重定向并发送消息

来自分类Dev

redux如何使用react-router在componentWillMount上重定向

来自分类Dev

使用备用路由配置进行React Router重定向

来自分类Dev

使用React Router重定向后重新渲染组件

Related 相关文章

  1. 1

    使用react-router重定向表单提交

  2. 2

    在提交时重定向React表单组件。React Router v5.1

  3. 3

    提交表单React后如何重定向

  4. 4

    React Router Redirect - 表单提交和重定向尝试加载 HomeRoute

  5. 5

    使用表单提交重定向延迟

  6. 6

    使用React提交表单后如何重定向用户

  7. 7

    使用AutoForm&Iron Router在Meteor上检查插入是否成功后,用于重定向提交表单的标准模式?

  8. 8

    使用 React Router 重定向

  9. 9

    使用纯JavaScript提交表单后重定向

  10. 10

    如何使用React Router的重定向功能?

  11. 11

    使用React Router组件进行重定向

  12. 12

    重定向到表单提交页面并在新页面中使用表单数据

  13. 13

    使用保存的表单参数提交表单时,rails重定向到编辑页面

  14. 14

    在React前端中提交表单时重定向和刷新页面

  15. 15

    使用jQuery进度栏提交表单后重定向到另一个页面

  16. 16

    提交表单后,我应该使用301、302或303重定向吗?

  17. 17

    引导程序验证成功后,如何使用$ .post提交表单而不进行页面重定向?

  18. 18

    在表单上使用<span>按钮提交,重定向到新站点

  19. 19

    使用javascript从特定选中的单选按钮提交表单时创建页面重定向

  20. 20

    使用Contact Form 7 WordPress插件无法进行表单提交重定向

  21. 21

    如何使用onbeforeunload作为后退按钮,但防止表单提交和内部页面重定向

  22. 22

    提交表单后如何使用参数重定向到 PHP CodeIgniter 中的列表视图页面?

  23. 23

    使用 Ajax 请求在 DIV 中加载的 Ajax 表单在提交时重定向 - Framework7

  24. 24

    使用旧输入数据重新加载或提交表单后重定向到相同的ajax页面

  25. 25

    使用react-router登录后自动重定向

  26. 26

    如何使用react-router重定向并发送消息

  27. 27

    redux如何使用react-router在componentWillMount上重定向

  28. 28

    使用备用路由配置进行React Router重定向

  29. 29

    使用React Router重定向后重新渲染组件

热门标签

归档