【问题标题】:How to have changeable values in input React JS?如何在输入 React JS 中有可变值?
【发布时间】:2021-04-30 08:23:56
【问题描述】:

我试图在输入值中设置我的值!但在那之后,我不能在输入字段中写任何东西!我想从后端设置值!

我们正在编写一个管理员频道来编辑文章,因为我们需要已经存在的文章值来编辑文章!我究竟做错了什么!或者也许您可以建议一种更好的方法来编辑管理员频道中的文章!

代码如下:

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { useParams } from 'react-router';

const EditArticle = (props) => {
  const [editValues, setEditValues] = useState([]);
  const [changedValues, setChangedValues] = useState('');
  console.log('values', editValues);
  console.log('changed', changedValues);
  const params = useParams();
  console.log(params);
  const resultsId = params.id;
  console.log('string', resultsId);
  const [authTokens, setAuthTokens] = useState(
    localStorage.getItem('token') || ''
  );

  const setTokens = (data) => {
    localStorage.setItem('token', JSON.stringify(data));
    setAuthTokens(data);
    // setToken(data['dataValues']['token']);
  };

  useEffect(() => {
    const fetchData = async () => {
      try {
        const res = await axios.get(
          `${process.env.REACT_APP_API_URL}/article/${resultsId}`
        );
        setEditValues(res.data);
      } catch (err) {}
    };
    fetchData();
  }, [resultsId]);

  const inputValue = editValues;

  const userToken = props.token;
  return (
    <div>
      <form value={{ authTokens, setAuthTokens: setTokens }}>
        <input
          value={editValues.title || ''}
          onChange={(input) => setChangedValues(input.target.value)}
          type='text'
        />
        <input
          //   ref={editValues.shortDesc}
          value={editValues.shortDesc}
          onChange={(input) => setChangedValues(input.target.value)}
          type='text'
        />
        <button type='submit'>send</button>
      </form>
    </div>
  );
};

export default EditArticle;

【问题讨论】:

  • 您的输入值似乎只有在路由参数更新并且useEffect 获取并调用setEditValues 并带有响应时才会更新。您的 onChange 处理程序正在更新从未使用过的状态。
  • 但我需要用新的值编辑文章的旧值!我需要编辑文章!你知道更好的方法吗?
  • 这是什么意思?您能否对所需行为提供更清晰的解释?从表面上看,“如何在输入 React JS 中有可变值?”答案是将输入的valueonChange 处理程序正在更新的内容配对。这就是受控输入的工作方式。如果您需要不同的 行为,那么您需要更详细地解释这一点。或许提供一组您希望发生的步骤。

标签: javascript reactjs input


【解决方案1】:

您可以使用只使用editValues 来完成它。试试这个: 我只是在没有调用 api 来运行代码的情况下复制了它。

import React, { useState, useEffect } from "react";

const EditArticle = (props) => {
  const [editValues, setEditValues] = useState([]);
  console.log("values", editValues);
 
  const [authTokens, setAuthTokens] = useState(
    localStorage.getItem("token") || ""
  );

  const setTokens = (data) => {
    localStorage.setItem("token", JSON.stringify(data));
    setAuthTokens(data);
    // setToken(data['dataValues']['token']);
  };

  useEffect(() => {
    const fetchData = async () => {
      try {
        //here get the data from api and setstate
        setEditValues({ title: "title", shortDesc: "shortDesc" });
      } catch (err) {}
    };
    fetchData();
  }, []);
  return (
    <div>
      <form value={{ authTokens, setAuthTokens: setTokens }}>
        <input
          value={editValues.title || ""}
          onChange={(input) => setEditValues({title: input.target.value})}
          type="text"
        />
        <input
          value={editValues.shortDesc}
          onChange={(input) => setEditValues({shortDesc: input.target.value})}

          type="text"
        />
        <button type="submit">send</button>
      </form>
    </div>
  );
};
export default EditArticle;

【讨论】:

    【解决方案2】:

    您的 onChange 处理程序正在更新与输入中用作 value 的状态属性不同的状态属性(editValues 与 changedValues)。

    您还可以将defaultValue 传递给input,这将仅用作默认值。

    在此处查看更多信息https://reactjs.org/docs/uncontrolled-components.html

    【讨论】:

    • 我需要有现有的默认值,因为管理员正在编辑文章!所以他需要一个不能与 defaultValue 一起使用的可变值!
    猜你喜欢
    • 2021-06-19
    • 2021-09-17
    • 1970-01-01
    • 2017-12-07
    • 2022-07-16
    • 2019-10-09
    • 2021-05-17
    • 2018-09-10
    • 1970-01-01
    相关资源
    最近更新 更多