【问题标题】:Insert value of a select with axios in reactjs在 reactjs 中使用 axios 插入选择的值
【发布时间】:2020-12-23 21:12:53
【问题描述】:

我正在 React.Js 中开发一个应用程序,由于某种原因它没有保存在选择中选择的值。

    const App = () => {
        // is obtained from another api: REQUEST_API_GET
        const Dates = dates.map(item => ({
            value: item.Name,
            label: item.Name,
        }));
    
        const [date, setDate] = React.useState({
            Name: ''
        });
    
        function handleChangeDate(event) {
            setDate({
                Name: event.value
              })
        }
    
        const addDate = (date) => {
            axios.post(`${REQUEST_API_POST}`, {date});
        };
    
        return (
            <>
                <div>
                    <NoSsr>
                        <Select
                            classes={classes}
                            styles={selectStyles}
                            inputId="date"
                            TextFieldProps={{
                                label: 'Date',
                                InputLabelProps: {
                                htmlFor: 'date',
                                shrink: true,
                                },
                                placeholder: 'Search',
                            }}
                            options={date}
                            components={components}
                            value={date.Name}
                            onChange={handleChangeDate}
                        />
                    </NoSsr>
    
                    <a onClick={() => addDate()}>add</a>
                </div>
            </>
        )
    }

export default App;

我选择的时候好像是取值,如果放console.log你可以在handleChangeDate看到,但是在addDate里面没有取值。

我该如何解决它,建议?

【问题讨论】:

  • 在发布之前还要检查您的日期是否为空...
  • 好的,谢谢!

标签: javascript json reactjs api axios


【解决方案1】:

您在 addDate 中使用的变量日期不是钩子。 只需删除日期参数即可。

    const addDate = () => { // <-- no date in input
        axios.post(`${REQUEST_API_POST}`, {date});
    };

【讨论】:

  • 感谢您的帮助!我在addDate 中添加了console.log 并返回:名称:“”。可以举个例子吗?
  • 看答案中的代码。如果您删除 addDate 函数中的输入参数,它应该可以工作。
  • 正在返回一个对象,它不应该插入一个元素吗?如果我在addDate 中添加name: '20202,它会插入它
  • 如果是数字则插入它 如果是字符串则不插入,为什么?
【解决方案2】:

仅查看您的代码,很明显您实际上并未在 addDate 处理程序中使用正确的数据。

您需要在参数中传递 state 值,甚至更好地直接在回调中传递,如下所示:

const addDate = () => {
    axios.post(`${REQUEST_API_POST}`, {date}); // here your date is your state!
};

由于您没有传递任何参数,因此您也可以像这样改进onClick 中的回调:

<a onClick={addDate}>add</a>

另一个细节,将对象属性设置为小写值更为常见,因此 Namename

【讨论】:

  • 感谢您的帮助!我应用了建议的更改,但尚未保存选定的值,已将 console.log 放入 addDate 并返回:name: ""
  • 如果是数字则插入它 如果是字符串则不插入,为什么?
【解决方案3】:

当调用 addDate() 函数时,您没有传递任何参数,但在您的参数中您已将日期指定为参数(也没有任何默认值)。我认为您正在尝试访问 date 的值,这是一个 state,并且可以在函数中的任何位置访问 state,因此无需将其作为参数传递.

enter code here
const addDate = () => {
    axios.post(`${REQUEST_API_POST}`, {date});
}; 

使用它会正常工作

您还可以在函数 addData 中将日期(状态)作为参数传递,例如 像这样(addData(date)),这也可以。 但第一种方法更好

【讨论】:

  • 感谢您的帮助!我在addDate 中添加了console.log 并返回:名称:“”。可以举个例子吗?
  • 我在上面的答案中编写的代码可以正常工作。当你使用 state 时,它​​可以在函数中的任何地方访问,因此不需要将它作为参数传递,只需直接使用 state 值
  • 正在返回一个对象,它不应该插入一个元素吗?
  • 您想将什么作为数据传递给您的 axios 请求?如果你想传递数据对象,你可以使用 {date} 或 {date: date} (它们都是相同的,使用它们中的任何一个);如果您想将 api 请求中的键(名称)的值作为数据传递而不是传递 {date: date.Name},我希望您现在明白了
  • 如果我在addDate 中添加name: '20202,它会插入它。我会试试你告诉我的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多