Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Functional React组件中的JSON响应中获取一个特定值,并将其设置为Select选项

从Functional React组件中的JSON响应中获取一个特定值,并将其设置为Select选项
EN

Stack Overflow用户
提问于 2020-09-28 10:59:53
回答 1查看 1.1K关注 0票数 0

我对React非常陌生,我有一个选择框,我想用API中的数据填充它。API请求传递该特定用户的ID,API将相应的地址返回给该用户。我需要稍后动态设置ID,但这不是我目前面临的问题;JSON响应很好,解析JSON对象并将所有键值对记录到控制台是可管理的;但是,在尝试将一个特定的键值对(包含用户地址的键值对)设置为Select Box中的选项时,我遇到了麻烦。我编写的函数映射所有数据并只返回一个特定的键值对,但它不断迭代JSON对象,因此冻结了整个应用程序;返回的地址应设置为选择框中的默认选项,该变量称为“object”。

当然有更好的方法可以做到这一点,但我不知道怎么做,所以任何提示或帮助都会非常感谢,提前谢谢!

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, {Component, useContext, useEffect, useRef, useState} from 'react';
import "./formstyles.css";

//i18n
import {withNamespaces} from 'react-i18next';

//Import Breadcrumb

import { withRouter } from "react-router-dom";
import classnames from "classnames";
import EmployeesList from "../../pages/Employees/employees-list";
import EmployeeIdComponent from "./EmployeeId";

import EmployeeId from "./EmployeeId";


const SelectComponent = (props) => {


    const [loading, setLoading] = React.useState(true);
    const [error, setError] = React.useState('');
    const [data, setData] = React.useState([]);
    const [mappedArr, setMappedArr] = React.useState([]);
    const [formattedaddress, setAddress] = useState([])

//以下函数返回需要的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    let usersWithName = Object.keys(data).map(function(key) {
        JSON.stringify(data);
        let newArr = Object.keys(data);
        let mappedArr = newArr.map(function (i) {
            return [i, data[i]];
        })
        let formattedaddress = mappedArr[18];
        return formattedaddress
    });

//该效果将整个函数设置为选项值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    useEffect(() => {
        setAddress(

        usersWithName
        );
    });

//下面的效果获取用户ID的数据并返回//整个对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    useEffect(() => {
        setLoading(true);
        fetch('http://tpservice:8888/api/v1/address/d472faec-4316-4040-a2cb-63cb99b5bed1')
            .then((response) => response.json())
            .then((data) => {
                setLoading(false);
                setData(data);
            })

            .catch((e) => {
                setLoading(false);
                setError('fetch failed');
            });
    }, []);

    if (loading) {
        return <p>loading..</p>;
    }

    if (error !== '') {
        return <p>ERROR: {error}</p>;
    }

    return (
        <React.Fragment>
           <div className="clearfix">
                <div className="float-left">
                    <div className="input-group input-group-sm">
                        <div className="input-group-append">
                            <label className="input-group-text">Adresse</label>
                        </div>
                        <select className="custom-select custom-select-sm">
                            <option value="1">{formattedaddress}</option>
                            <option value="2">Adresse 2</option>
                            <option value="3">Adresse 3</option>
                            <option value="4">Adresse 4</option>
                        </select>
                    </div>
                </div>
            </div>
        </React.Fragment>
    );



}
export default withRouter(withNamespaces()(SelectComponent));;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-28 11:48:57

首先,我没有看到useEffect的依赖数组?在这里你调用setAddress,usersWithName -你得到的行为的主要嫌疑人。

其次,我建议将请求方法导出到自定义钩子中,而不是可以在组件中使用的错误,例如const {data,loading,useEffect }= useRequest()。它让你的组件没有乱七八糟的东西,钩子是可重用的。

第三,我相信你想要做的是用这个方法usersWithName改变响应对象,我会再次将它实现为一个单独的助手函数,并在钩子(如果不可重用)中调用它,或者当你想要访问改变后的值时调用它。或者,您可以使用useMemo,它将存储映射的数组,并在每次响应更改时重新计算值。

跟进:

hooks.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const useReqest = ({ requestUrl }) = {
  const [data, setData] = useState();
  const [loading, setLoading] = useState();
  const [error, setError] = useState();

  useEffect(() => {
     fetch(...)
     .then((response) => setData(yourMutationFunction(JSON.parse(response))))
     .catch((e) => setError(e))
  }, [requestUrl])

  return {data, loading, error};
}

您可以在组件中使用它,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Note this hook is execited everytime requestUrl changes or is initialised
const { data, loading, error } = useRequest({requestUrl: 'someUrl'})

试着改进这个钩子,然后完成第三部分!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64100896

复制
相关文章
laravel-admin select、multipleSelect从api中获取选项列表
select、multipleSelect从api中获取选项列表 $form->select($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']); 或者从api中获取选项列表: $form->select($column[, $label])->options('/api/users'); 其中api接口的格式必须为下面格式: [ { "id": 9, "tex
友儿
2022/09/11
3.8K0
PHP 解析JSON 并获取对应的值
本文由 Alone88 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为: Sep 21, 2019 at 01:53 pm
Alone88
2019/10/22
2.9K0
react中父组件向子组件传值
子组件中只能使用不能修改父组件传递过来的数据!!!如果非要修改,那就父组件传递一个方法给子组件,子组件使用这个方法来改变父组件中的数据。这就是react的单项数据流(父组件传递给子组件,不可以在子组件中改变)
全栈程序员站长
2022/09/01
2.5K0
如何在 React 中的 Select 标签上设置占位符?
在 React 中,<Select> 标签是用于创建下拉选择框的组件。在某些情况下,我们希望在选择框中添加一个占位符,以提醒用户选择合适的选项。本文将详细介绍如何在 React 中的 <Select> 标签上设置占位符,并提供示例代码帮助你理解和应用这个功能。
网络技术联盟站
2023/06/07
3.2K0
react中类组件传值,函数组件传值:父子组件传值、非父子组件传值[通俗易懂]
函数组件中我们一般情况下使用useEffect实现数据的请求 // useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount (加载,更新,卸载)这三个函数的组合。 语法格式: useEffect(()=>{ },[])
全栈程序员站长
2022/08/30
6.3K0
关于React组件props默认值的设置
在编写react组件的时候,为了兼容一些分支逻辑,我们经常会给组件的props设置一些默认值,但是有些默认值的写法会导致一些潜在的问题,比如无法推断类型,本文将对几种设置默认值的写法进行分析,总结其优劣。
Jou
2023/05/01
3.9K0
关于React组件props默认值的设置
vue中同时获取select下拉框的值和文本
在下是首席架构师
2023/07/04
2K0
vue中同时获取select下拉框的值和文本
php取得json_decode中的值,php json decode-获取值[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 正如Danp已经说过的,返回的JSON包含在函数调用中(由 jsoncallback=json )你不能完全摆脱这个,但是,只是用 AreaSearch?js
全栈程序员站长
2022/09/09
8.4K0
Redhat6中获取LANG值为空
首先来描述一下我遇到的问题:如下图所示在我们产品中,服务脚本放置在目录/etc/init.d中,在用命令 "service xxx start" 后,脚本中启动应用程序ice_main,ice_main进程中使用命令 "locale" 来获取当前所使用的语言。但是获取的LANG的值为空......
河边一枝柳
2021/08/06
4K0
React中的高阶组件
高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合特性而形成的设计模式。
WindRunnerMax
2021/01/18
3.8K0
npm 中如何下载特定的组件版本
IMWeb前端团队
2018/01/08
4.3K0
npm 中如何下载特定的组件版本
React中的纯组件
React提供了一种基于浅比较模式来确定是否应该重新渲染组件的类React.PureComponent,通常只需要继承React.PureComponent就可以定义一个纯组件。React.PureComponent与React.Component很相似,两者的区别在于React.Component并未实现shouldComponentUpdate(),而React.PureComponent中以浅层对比prop和state的方式来实现了该函数。如果赋予React组件相同的props和state,render()函数会渲染相同的内容,那么在某些情况下使用React.PureComponent可提高性能。
WindRunnerMax
2021/01/18
2.5K0
3、React组件中的this
这段代码运行,可以看到student.func()打印了student对象,因为此时this指向student对象;而studentFunc()打印了window,因为此时由window调用的,this指向window。
keyWords
2018/09/19
2.9K0
3、React组件中的this
用于从 JSON 响应中提取单个值的 Python 程序
值提取是一个非常流行的编程概念,它用于各种操作。但是,从 JSON 响应中提取值是一个完全不同的概念。它帮助我们构建逻辑并在复杂数据集中定位特定值。本文将介绍可用于从 JSON 响应中提取单个值的各种方法。在开始值提取之前,让我们重点了解 JSON 响应的含义。
很酷的站长
2023/08/11
2180
用于从 JSON 响应中提取单个值的 Python 程序
angularjs中设置select的选中项
最近用angularjs比较多,里面有很多自己的方法,都不咋会用,这篇只是个笔记,防止自己忘记
庞小明
2019/07/08
3.2K0
jQueryWEUI动态赋值select下拉框并获取value值
数据形式 var gift_id = ""; $.ajax({ url: '', type: 'post',
明知山
2020/09/03
3.2K0
element-ui 中 ele-select 获取选中option的label值
通过名字获取选中option的label值,如果此方法失效,可打印此对象this.$refs.itemSelect,查找选中项的label值
十里青山
2022/08/07
4.7K0
获取listbox中的值
List<string> list=new List<string>();             for (int i = 0; i < lbLog.Items.Count - 1; i++)             {                 list.Add(lbLog.Items[i].ToString());             }
2018/09/03
6.2K0
eclipse设置中没有server选项[通俗易懂]
用eclipse准备配置tomcat,发现配置中没有server选项,参考各种解决方法之后成功解决。
全栈程序员站长
2022/08/01
6.5K1
eclipse设置中没有server选项[通俗易懂]
npm 中如何下载特定的组件版本
为了更好的进行说明,我们选择了 lodash 来演示,因为它是被其他模块依赖最多的模块之一。本文是在 windows 7 64位系统中进行测试,npm 版本为 v3.8.1,其他的平台和 npm 版本在某些提示上可能会稍有不同。
IMWeb前端团队
2019/12/04
4.1K0

相似问题

《Uncaught: require not defined》with Angular 2/webpack

34

require not defined "var mysql = require('mysql');“

20

带有"target:'node'“和"type:'module'”的Webpack配置抛出了'require is not defined‘

189

尝试设置.env文件时出现‘'require is not defined’错误

10

导入文件系统模块时'ReferenceError: require is not defined‘

1504
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文