【发布时间】: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 中有可变值?”答案是将输入的
value与onChange处理程序正在更新的内容配对。这就是受控输入的工作方式。如果您需要不同的 行为,那么您需要更详细地解释这一点。或许提供一组您希望发生的步骤。
标签: javascript reactjs input