输入中的自动完成数据

忘记

我想在输入中显示自动完成中的数据,如下所示:

自动完成功能

当我尝试执行此操作时,出现错误:

×TypeError:无法读取未定义onSelect的属性'setState'

94 | onSelect = {值=> this.setState({值})}

我坚持这一点,我可能做错了。希望有人可以帮助我,因为我已经尝试了所有我知道的东西,但是看不到问题所在。所以请帮助我:)

privateMovie.js

import React, { useState, useEffect, setState } from "react";
import Layout from "../core/Layout";
import axios from "axios";
import { isAuth, getCookie, signout, updateUser } from "../auth/helpers";
import { ToastContainer, toast } from "react-toastify";
import "react-toastify/dist/ReactToastify.min.css";
import Autocomplete from "react-autocomplete";
import { MoviesData, renderMovieTitle } from "./movie-data";

const Private = ({ history }) => {
  const [values, setValues ] = useState({
    value: "",
    suggestions: [],
    movie: "",
    buttonText: "Submit"
  });

  const token = getCookie("token");

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

  const loadProfile = () => {
    axios({
      method: "get",
      url: `${process.env.REACT_APP_API}/user/${isAuth()._id}`,
      headers: {
        Authorization: `Bearer ${token}`
      }
    })
      .then(response => {
        console.log("PRIVATE PROFILE UPDATE", response);
        const { movie } = response.data;
        setValues({ ...values, movie });
      })
      .catch(error => {
        console.log("PRIVATE PROFILE UPDATE ERROR", error.response.data.error);
        if (error.response.status === 401) {
          signout(() => {
            history.push("/");
          });
        }
      });
  };

  const { movie, buttonText } = values;

  const handleChange = value => event => {
    // console.log(event.target.value);
    setValues({ ...values, [value]: event.target.value });
  };

  const clickSubmit = event => {
    event.preventDefault();
    setValues({ ...values, buttonText: "Submitting" });
    axios({
      method: "POST",
      url: `${process.env.REACT_APP_API}/movie/create`,
      headers: {
        Authorization: `Bearer ${token}`
      },
      data: { movie }
    })
      .then(response => {
        console.log("PRIVATE PROFILE UPDATE SUCCESS", response);
        updateUser(response, () => {
          setValues({ ...values, buttonText: "Submitted" });
          toast.success("Profile updated successfully");
        });
      })
      .catch(error => {
        console.log("PRIVATE PROFILE UPDATE ERROR", error.response.data.error);
        setValues({ ...values, buttonText: "Submit" });
        toast.error(error.response.data.error);
      });
  };

  const updateForm = () => (
    <form>
      <div className="form-group">
        <label className="text-muted">AUTOCOMPLETE</label>
        <Autocomplete
        type="text"
          getItemValue={item => item.title}
          items={MoviesData()}
          shouldItemRender={renderMovieTitle}
          renderItem={(item, isHighlighted) => (
            <div style={{ background: isHighlighted ? "lightgray" : "white" }}>
              {item.title}
            </div>
          )}
          onChange={(event, value) => this.setState({ value }) }
          onSelect={ value => this.setState({ value }) }
        />
        <input
          onChange={handleChange("movie")}
          value={movie}
          type="text"
          className="form-control"
        />
      </div>
      <div>
        <button className="btn btn-primary" onClick={clickSubmit}>
          {buttonText}
        </button>
      </div>
    </form>
  );

  return (
    <Layout>
      <div className="col-md-6 offset-md-3">
        <ToastContainer />
        <h1 className="pt-5 text-center"></h1>
        <p className="lead text-center"></p>
        {updateForm()}
      </div>
    </Layout>
  );
};

export default Private;


雅各布·莱姆勒

我想你把它混了。

相反,您调用this.setState()

调用破坏函数setValues()

在组件函数的开头声明

 const [values, setValues ] = useState({
    value: "",
    suggestions: [],
    movie: "",
    buttonText: "Submit"
  });

如果使用“ useState”并将其销毁在“ getValues”和“ setValues”中,则可以在导入中摆脱setState。

参见文档:

https://reactjs.org/docs/hooks-state.html

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用select2:opening调用中的值作为ajax自动完成数据参数的输入

jQuery自动完成数据

呈现jQuery自动完成数据中存在的html元素

清除自动完成数据jQuery

过滤自动完成数据源

如何将来自 Ngx-bootstrap typeahead 的自动完成数据绑定到输入字段

如何在组件中绑定角材料自动完成数据

为什么该网站返回包装在jQuery标签中的自动完成数据?

如何过滤具有2万个元素的数组中的自动完成数据?

来自远程服务器的 NativeScript 自动完成数据

如何获取正确格式的自动完成数据

如何填充materialize.css芯片自动完成数据?

jQuery UI使用Ajax来自动完成数据

延迟加载自动完成数据列表 angularjs

离子4-数据列表中的离子输入自动完成

如何使用 Ajax 和 Laravel 将自动完成数据提取到他们受尊重的元素中?

您如何在Django中自动完成数据库中一种表单的更新信息

如何在输入字段中自动生成数字?

剑道自动完成数据源显示未找到数据

在C#中从数据库自动生成数字

原始JavaScript输入中的自动完成括号

如何保留自动完成中输入的内容

自动完成数据源以呈现 ListItem 组件 - [material-ui]

浏览器如何存储自动完成数据以及在何处?

如何将自动完成数据提供给鱼别名?

将jQuery自动完成数据附加到textarea内容,而不是覆盖它

将Google Apps脚本数组应用于HTML表单自动完成数据列表

我正在尝试将 url 链接添加到自动完成数据

在BootstrapVue自动完成中识别数据列表选择与文本输入