首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从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
运行
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
运行
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
运行
AI代码解释
复制
    useEffect(() => {
        setAddress(

        usersWithName
        );
    });

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

代码语言:javascript
运行
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
运行
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
运行
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

复制
相关文章
React高阶组件HOC的使用
高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。 高阶组件只提供逻辑代码 视图代码会做为参数传递给高阶组件进行渲染
明知山
2021/10/25
9990
React高阶组件HOC的使用
如何将Redux与React Hooks一起使用
React Redux在2019年6月11日发布的7.1版中提供了对Hooks的支持。这意味着我们可以在函数组件中将Redux与Hooks一起使用,而不是使用高阶组件(HOC)。
前端知否
2020/03/23
7.1K0
如何将Redux与React Hooks一起使用
React 高阶HOC (一)
高阶组件 (HOC) 是 React 中用于重用组件逻辑的高级技术。HOC 本身并不是 React API 的一部分。它们是从 React 的组合性质中出现的一种模式。
ronixiao
2022/08/08
8490
React 高阶HOC (一)
React 高阶组件HOC
概述 高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧,通俗的讲,高阶组件就是一个 React 组件包裹着另外一个 React 组件。它本身并不是 React 的 API,而是一种 React 组件设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 react-redux。 高级组件使用函数来实现,基本上是一个类工厂,它的函数签名可以用类似 haskell 的伪代码表示: hocFactory:: W: React.Com
xiangzhihong
2018/02/06
1.7K0
React系列-Mixin、HOC、Render Props
在讲react-hooks之前,我们来捋捋react状态逻辑复用相关知识点,这会帮助你理解hooks
落落落洛克
2021/01/08
2.4K0
React系列-Mixin、HOC、Render Props
「react进阶」一文吃透React高阶组件(HOC)
React高阶组件(HOC),对于很多react开发者来说并不陌生,它是灵活使用react组件的一种技巧,高阶组件本身不是组件,它是一个参数为组件,返回值也是一个组件的函数。高阶作用用于强化组件,复用逻辑,提升渲染性能等作用。高阶组件也并不是很难理解,其实接触过后还是蛮简单的,接下来我将按照,高阶组件理解?,高阶组件具体怎么使用?应用场景, 高阶组件实践(源码级别) 为突破口,带大家详细了解一下高阶组件。本文篇幅比较长,建议收藏观看
用户6835371
2021/06/01
2.2K0
「react进阶」一文吃透React高阶组件(HOC)
React篇(048)-什么是高阶组件(HOC)?
高阶组件(HOC) 就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件,它只是一种模式,这种模式是由react自身的组合性质必然产生的。
齐丶先丶森
2022/05/12
4820
应用connected-react-router和redux-thunk打通react路由孤立
在我们开发过程中,很多时候,我们需要让组件共享某些数据,虽然可以通过组件传递数据实现数据共享,但是如果组件之间不是父子关系的话,数据传递是非常麻烦的,而且容易让代码的可读性降低,这时候我们就需要一个 state(状态)管理工具。常见的状态管理工具有 redux,mobx,这里选择 redux 进行状态管理。值得注意的是 React 16.3 带来了全新的Context API,我们也可以使用新的 Context API 做状态管理。Redux 是负责组织 state 的工具,但你也要考虑它是否适合你的情况。
Run丘比特
2020/11/19
2.4K0
应用connected-react-router和redux-thunk打通react路由孤立
【React深入】从Mixin到HOC再到Hook(原创)
前端发展速度非常之快,页面和组件变得越来越复杂,如何更好的实现 状态逻辑复用一直都是应用程序中重要的一部分,这直接关系着应用程序的质量以及维护的难易程度。
ConardLi
2019/05/23
1.8K0
slim.fully_connected()
def fully_connected(inputs, num_outputs, activation_fn=nn.relu, normalizer_fn=None, normalizer_params=None, weights_initializer=initializers.xavier_initializer()
狼啸风云
2019/08/29
3.8K0
Ansible Ad-Hoc与常用模块
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
踏歌行
2020/10/15
1.7K0
Ansible Ad-Hoc与常用模块
如何将CocoaPods与多个Framework子项目一起使用
假设主项目是MAIN_APP,两个子项目是FRAMEWORK_A和FRAMEWORK_B。
freesan44
2019/10/12
4.2K0
精读 React 高阶组件
高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧。它本身并不是 React 的 API,而是一种 React 组件的设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 react-redux。
前端迷
2019/08/09
9870
精读 React 高阶组件
React组件复用的方式
现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护、可复用的代码就变得尤为重要,在React中组件是代码复用的主要单元,基于组合的组件复用机制相当优雅,而对于更细粒度的逻辑(状态逻辑、行为逻辑等),复用起来却不那么容易,很难把状态逻辑拆出来作为一个可复用的函数或组件,实际上在Hooks出现之前,都缺少一种简单直接的组件行为扩展方式,对于Mixin、HOC、Render Props都算是在既有(组件机制的)游戏规则下探索出来的上层模式,一直没有从根源上很好地解决组件间逻辑复用的问题,直到Hooks登上舞台,下面我们就来介绍一下Mixin、HOC、Render Props、Hooks四种组件间复用的方式。
WindRunnerMax
2021/02/25
2.9K0
12. 精读《React 高阶组件》
本期精读文章是:React Higher Order Components in depth
黄子毅
2022/03/14
5100
12. 精读《React 高阶组件》
React组件复用的发展史
React MiXin只能通过React.createClass()来使用,如下:
夏天的味道123
2022/10/03
1.4K0
React的组件复用的发展史
React MiXin只能通过React.createClass()来使用,如下:
夏天的味道123
2022/12/07
1.6K0
React中的高阶组件
高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合特性而形成的设计模式。
WindRunnerMax
2021/01/18
3.9K0
SQL Server Ad Hoc Distributed Queries开启与关闭
文章时间:2020年3月23日 14:58:27 解决问题:Ad Hoc Distributed Queries的启用与关闭 直接复制下面的命令进行执行即可。 启用Ad Hoc Distributed Queries exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure 关闭Ad Hoc Distributed Queries
华创信息技术
2020/03/25
8290
【19】进大厂必须掌握的面试题-50个React面试
这是最有可能由面试官提出的 常被问到的50个React面试问答。为了方便您访问,我对React面试问题进行了归类:
全栈程序员站长
2021/04/07
11.5K0

相似问题

如何将HoC与React Native一起使用

116

将TypeScript与React HOC、React.lazy和forwarRef一起使用

135

将Apollo GraphQL HOC模式与现有的HOC一起使用

11

将redux与不带connect HOC的react-hooks一起使用

127

使用HOC的React路由器渲染方法

118
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档