Javascript React App JS-如何引用静态JSON文件

Javascript React App JS-如何引用静态JSON文件,javascript,reactjs,Javascript,Reactjs,在JS中,我指的是远程服务器上的文件,如: class App extends Component { constructor(props) { super(props); let client = this.getParameterByName('client', window.url); this.state = { sidebarClass: 'open', client: client ? client : 'abc-client'

在JS中,我指的是远程服务器上的文件,如:

class App extends Component {
constructor(props) {
    super(props);
    let client = this.getParameterByName('client', window.url);
    this.state = {
        sidebarClass: 'open',
        client: client ? client : 'abc-client',
        specUrl: client
            ? `http://<remote-host>/${client}.json`
            : '<remote-host>/abc-client.json',
    };
    this.showAPI = this.showAPI.bind(this);
    this.toggleSidebar = this.toggleSidebar.bind(this);
}
getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}

showAPI(specURL) {
    this.setState({
        specUrl: 'http://<remotehost>/' + specURL + '.json',
        client: specURL,
    });
}
toggleSidebar() {
    this.setState((prevState) => ({
        sidebarClass: prevState.sidebarClass === 'open' ? '' : 'open',
    }));
}
render() {
    return (
        <div>
            <Sidebar
                showAPI={this.showAPI}
                toggleClass={this.state.sidebarClass}
                toggleSidebar={this.toggleSidebar}
                client={this.state.client}
            />
            <header className="header text-center">
                <div className="text-right">
                    <div className="hamburger" onClick={this.toggleSidebar}>
                        <svg
                            xmlns="http://www.w3.org/2000/svg"
                            viewBox="0 0 30 30"
                            width="30"
                            height="30"
                            focusable="false">
                            <path
                                stroke="#c635d7"
                                strokeWidth="2"
                                strokeLinecap="round"
                                strokeMiterlimit="10"
                                d="M4 7h22M4 15h22M4 23h22"
                            />
                        </svg>
                    </div>
                    <h3 className="heading text-center">{this.state.client}</h3>
                </div>
            </header>
            <section className={`swagger-container ${this.state.sidebarClass}`}>
                <Swagger specUrl={this.state.specUrl} />
            </section>
        </div>


    );
    }
   }
类应用程序扩展组件{
建造师(道具){
超级(道具);
让client=this.getParameterByName('client',window.url);
此.state={
侧边栏类:“打开”,
客户:客户?客户:“abc客户”,
specUrl:客户端
?`http://${client}.json`
:“/abc client.json”,
};
this.showAPI=this.showAPI.bind(this);
this.toggleSidebar=this.toggleSidebar.bind(this);
}
getParameterByName(名称、url){
如果(!url)url=window.location.href;
name=name.replace(/[\[\]]/g,\\$&');
var regex=new RegExp('[?&]'+name+'(=([^&#]*)和|#|$),
结果=regex.exec(url);
如果(!results)返回null;
如果(!results[2])返回“”;
返回组件(结果[2]。替换(/\+/g');
}
showAPI(specURL){
这是我的国家({
specUrl:'http://'+specUrl+'.json',
客户:specURL,
});
}
toggleSidebar(){
this.setState((prevState)=>({
sidebarClass:prevState.sidebarClass=='open'?'''open',
}));
}
render(){
返回(
{this.state.client}
);
}
}

现在,我希望将它捆绑到react应用程序本身中(在本地提供服务),而不是远程主机。我知道该文件需要存在于公用文件夹中,但不知道如何在上面共享的javaScript中引用它。

您可以使用fetch进行此操作。如果xxx.json位于公用文件夹的根目录中,请使用:

const data = fetch('xxx.json');
但是,为什么不直接将其放入src/data文件夹并作为以下内容加载:

import data from ‘./data/xxx.json’;

我认为第二种方法减少了对无用http请求的需求,并且可能会减少代码的大小。

在下一个示例中,您可以看到并确定数组为数据,它可以是axios或fetch请求之后来自后端的响应。您可以定义数据来模拟对象或数组中的响应,就像您喜欢的那样

import React, { useEffect, useState } from 'react';
import { View, Text, TextInput, StyleSheet, Dimensions, SafeAreaView, FlatList, TouchableOpacity, StatusBar } from 'react-native';
import ActionButton from 'react-native-action-button';
import Icon from 'react-native-vector-icons/FontAwesome';
import Header from '../../core/Header/Header';
import DismissKeyboard from '../../libs/DismissKeyboard';
const { width: WIDTH } = Dimensions.get('window');
import Guide from './Guide';

const styles = StyleSheet.create({
  iconQr: {
    fontSize: 36,
    color: 'white',
  },
  inputContainer: {
    marginTop: 10,
  },
  input: {
    height: 45,
    fontSize: 16,
    paddingLeft: 45,
    borderRadius: 10,
    width: WIDTH - 55,
    marginHorizontal: 25,
    backgroundColor: '#FFFFFF',
  },
  container: {
    flex: 1,
    marginTop: StatusBar.currentHeight || 0,
  },
});

const DATA = [
  {
    "empresa": "SHIPNOW",
    "tipo_operacion": "ENTREGA",
    "bultos": 1,
    "sender_empresa": "SUCSHIPNOW",
    "sender_remitente": "SHIPNOW",
    "sender_direccion": "Av. de los Constituyentes 2985",
    "sender_localidad": "CABA",
    "sender_provincia": "CABA",
    "sender_cp": 1428,
    "comprador_apenom": "Lisandro Arguello",
    "comprador_direccion": "Calle Jun\u00edn 2189",
    "comprador_localidad": "Corrientes",
    "comprador_provincia": "Corrientes",
    "comprador_cp": 3400,
    "usuario:": "shipnow",
    "id:": 166308,
    "zonaOrigen:": "AMBA",
    "fecha_hora:": "2020-10-01 13:20:13",
    "zona:": "NEA",
    "confirmada:": 1,
    "tipo_op:": 0,
    "remito:": null,
    "servicio:": "ENVIO ECOMMERCE",
    "orden:": 1,
    "rrId:": 61972,
    "contrareembolso:": null,
    "codigo_estado:": "011"
  },
  { "empresa": "SHIPNOW", "tipo_operacion": "ENTREGA", "bultos": 1, "sender_empresa": "SUCSHIPNOW", "sender_remitente": "SHIPNOW", "sender_direccion": "Av. de los Constituyentes 2985", "sender_localidad": "CABA", "sender_provincia": "CABA", "sender_cp": 1428, "comprador_apenom": "Mellsa Picchio", "comprador_direccion": "Uruguay 1145", "comprador_localidad": "BBB", "comprador_provincia": "Corrientes", "comprador_cp": 3400, "usuario": "shipnow", "id": 165891, "zonaOrigen": "AMBA", "fecha_hora": "2020-09-30 07:24:41", "zona": "NEA", "confirmada": 1, "tipo_op": 0, "remito": null, "servicio": "ENVIO ECOMMERCE", "orden": 2, "rrId": 61973, "contrareembolso": null, "codigo_estado": "011" },
  { "empresa": "SHIPNOW", "tipo_operacion": "ENTREGA", "bultos": 1, "sender_empresa": "SUCSHIPNOW", "sender_remitente": "SHIPNOW", "sender_direccion": "Av. de los Constituyentes 2985", "sender_localidad": "CABA", "sender_provincia": "CABA", "sender_cp": 1428, "comprador_apenom": "Claudia Silva", "comprador_direccion": "Calle Playa Miramar 2754", "comprador_localidad": "Corrientes", "comprador_provincia": "Corrientes", "comprador_cp": 3400, "usuario": "shipnow", "id": 166152, "zonaOrigen": "AMBA", "fecha_hora": "2020-09-30 16:34:43", "zona": "NEA", "confirmada": 1, "tipo_op": 0, "remito": null, "servicio": "ENVIO ECOMMERCE", "orden": 3, "rrId": 61974, "contrareembolso": null, "codigo_estado": "011" },
  { "empresa": "SHIPNOW", "tipo_operacion": "ENTREGA", "bultos": 1, "sender_empresa": "SUCSHIPNOW", "sender_remitente": "SHIPNOW", "sender_direccion": "Av. de los Constituyentes 2985", "sender_localidad": "CABA", "sender_provincia": "CABA", "sender_cp": 1428, "comprador_apenom": "Claudia Silva", "comprador_direccion": "Azcuenga 1995", "comprador_localidad": "Corrientes", "comprador_provincia": "Corrientes", "comprador_cp": 3400, "usuario": "shipnow", "id": 166153, "zonaOrigen": "AMBA", "fecha_hora": "2020-09-30 16:34:43", "zona": "NEA", "confirmada": 1, "tipo_op": 0, "remito": null, "servicio": "ENVIO ECOMMERCE", "orden": 3, "rrId": 61974, "contrareembolso": null, "codigo_estado": "011" },
  { "empresa": "SHIPNOW", "tipo_operacion": "ENTREGA", "bultos": 1, "sender_empresa": "SUCSHIPNOW", "sender_remitente": "SHIPNOW", "sender_direccion": "Av. de los Constituyentes 2985", "sender_localidad": "CABA", "sender_provincia": "CABA", "sender_cp": 1428, "comprador_apenom": "Claudia Silva", "comprador_direccion": "Urquiza 2050", "comprador_localidad": "Corrientes", "comprador_provincia": "Corrientes", "comprador_cp": 3400, "usuario": "shipnow", "id": 166154, "zonaOrigen": "AMBA", "fecha_hora": "2020-09-30 16:34:43", "zona": "NEA", "confirmada": 1, "tipo_op": 0, "remito": null, "servicio": "ENVIO ECOMMERCE", "orden": 3, "rrId": 61974, "contrareembolso": null, "codigo_estado": "011" },
  { "empresa": "SHIPNOW", "tipo_operacion": "ENTREGA", "bultos": 1, "sender_empresa": "SUCSHIPNOW", "sender_remitente": "SHIPNOW", "sender_direccion": "Av. de los Constituyentes 2985", "sender_localidad": "CABA", "sender_provincia": "CABA", "sender_cp": 1428, "comprador_apenom": "Claudia Silva", "comprador_direccion": "Palmares Valley 50", "comprador_localidad": "Corrientes", "comprador_provincia": "Corrientes", "comprador_cp": 3400, "usuario": "shipnow", "id": 166155, "zonaOrigen": "AMBA", "fecha_hora": "2020-09-30 16:34:43", "zona": "NEA", "confirmada": 1, "tipo_op": 0, "remito": null, "servicio": "ENVIO ECOMMERCE", "orden": 3, "rrId": 61974, "contrareembolso": null, "codigo_estado": "011" },
]


function Delivieries({ navigation, route }) {
  const [selectedId, setSelectedId] = useState(null);
  const [guideNumber, setGuideNumber] = useState(null);

  useEffect(() => route.params?.guideNumber && setGuideNumber(route.params?.guideNumber)
    , [route.params?.guideNumber]);

  const renderGuide = ({ item, index }) => {
    console.log(item)
    const backgroundColor = item.id === selectedId ? "#FFFFFF" : "#FFFFFF";
    return (
      <Guide
        item={item}
        index={index}
        onPress={() => setSelectedId(item.id)}
        style={{ backgroundColor }}
      />
    );
  };

  return (
    <>
      <Header title="Entregas pendientes" isHome={false} />
      <View style={{ marginTop: 25, marginLeft: 30, paddingBottom: 5 }}>
        <Text>Ingresar número de ruta</Text>
      </View>
      <DismissKeyboard>
        <View style={{ flex: 0.1, alignItems: 'center', justifyContent: 'center' }}>
          <View style={styles.inputContainer}>
            <TextInput
              value={guideNumber}
              onChangeText={(guideNumber) => setGuideNumber(guideNumber)}
              placeholder="Número de ruta"
              underlineColorAndroid="transparent"
              placeholderTextColor="rgba(0,0,0,0.2)"
              style={styles.input}
            />
          </View>
        </View>
      </DismissKeyboard>
      <SafeAreaView style={styles.container}>
        <FlatList
          data={DATA}
          renderItem={renderGuide}
          keyExtractor={(item) => item.id}
          extraData={selectedId}
        />
      </SafeAreaView>
      <ActionButton
        buttonColor="rgba(231,76,60,1)"
        renderIcon={() => <Icon name="qrcode" style={styles.iconQr} />}
        onPress={() => navigation.navigate('Scanner')}
        position="center"
        size={55}
      />
    </>
  );
};

export default Delivieries;
import React,{useffect,useState}来自“React”;
从“react native”导入{View、Text、TextInput、样式表、维度、SafeAreaView、FlatList、TouchableOpacity、StatusBar};
从“反应本机操作按钮”导入操作按钮;
从“反应本机矢量图标/FontAwesome”导入图标;
从“../../core/Header/Header”导入标头;
从“../../libs/DismissKeyboard”导入DismissKeyboard;
const{width:width}=Dimensions.get('window');
从“/Guide”导入指南;
const styles=StyleSheet.create({
iconQr:{
尺寸:36,
颜色:'白色',
},
输入容器:{
玛金托普:10,
},
输入:{
身高:45,
尺寸:16,
paddingLeft:45,
边界半径:10,
宽度:宽度-55,
marginHorizontal:25,
背景颜色:“#FFFFFF”,
},
容器:{
弹性:1,
marginTop:StatusBar.currentHeight | | 0,
},
});
常数数据=[
{
“empresa”:“SHIPNOW”,
“tipo_operacion”:“ENTREGA”,
“bultos”:1,
“发送者”\u empresa:“SucchipNow”,
“发件人/汇款人”:“立即发货”,
“发件人地址”:“宪法第2985号大街”,
“发送者”——“卡巴”,
“发送方省”:“CABA”,
“发送者”cp:1428,
“买办”——“Lisandro Arguello”,
“买办董事”:“Calle Jun\u00edn 2189”,
“地方买办”:“Corrientes”,
“省买办”:“勘误表”,
“买办”:3400,
“usuario::“shipnow”,
“id:”:166308,
“zonaOrigen::“AMBA”,
“费查霍拉::“2020-10-01 13:20:13”,
“zona::“NEA”,
“confirmada:”:1,
“tipo_op:”:0,
“汇款:”:空,
“服务::“环境电子商务”,
“奥登:”:1,
“rrId:”:61972,
“contareembolso:”:空,
“codigo_estado::“011”
},
{“empresa”:“SHIPNOW”,“tipo_operacion”:“ENTREGA”,“bultos”:1,“sender_empresa”:“SUCSHIPNOW”,“sender_-Transcenter”:“SHIPNOW”,“sender_-direccion”:“Av.de los Constityentes 2985”,“sender_-localidad”:“CABA”,“sender_-provincia”:“CABA”,“sender_-cp”:1428,“Compador_-apenom”:“Melsa Picchio”,“Compador_-direccion”:“乌拉圭1145”,“地方买办”:“BBB”,“地方买办”:“Corrientes”,“Compador_cp”:3400,“usuario”:“shipnow”,“id”:165891,“zonaOrigen”:“AMBA”,“fecha_hora”:“2020-09-30 07:24:41”,“zona”:“NEA”,“confirmada”:1,“tipo_op”:0,“汇款”:空,“服务”:“ENVIO电子商务”,“orden”:2,“rrId”:61973,“Contrarembolso”:空,“codigo”:“estado”:”011" },
{“经营”:“SHIPNOW”,“tipo_operacion”:“ENTREGA”,“bultos”:1,“sender_empresa”:“SUCSHIPNOW”,“sender_-Transcente”:“SHIPNOW”,“sender_-direccion”:“Av.de los Constityentes 2985”,“sender_-localidad”:“CABA”,“sender_-provincia”:“CABA”,“sender_-cp”:1428,“Compador_-apenom”:“Claudia Silva”,“Compador_-direccion”:“Calle Playa Miramar 2754”当地买办:“Corrientes”,“Compador_provincia”:“Corrientes”,“Compador_cp”:3400,“Usario”:“shipnow”,“id”:166152,“Zonarigen”:“AMBA”,“fecha_hora”:“2020-09-30 16:34:43”,“zona”:“NEA”,“confirmada”:1,“tipo_op”:0,“汇款”:空,“服务”:“ENVIO电子商务”,“orden”:3,“rrId”:61974,“Contrarembolso”:空,“codigo”": "011" },
{“empresa”:“SHIPNOW”,“tipo_operacion”:“ENTREGA”,“bultos”:1,“sender_empresa”:“SUCSHIPNOW”,“sender_-Transcente”:“SHIPNOW”,“sender_-direccion”:“Av.de los Constityentes 2985”,“sender_-localidad”:“CABA”,“sender_-provincia”:“CABA”,“sender_-cp”:1428,“Compador_-apenom”:“Claudia Silva”,“Compador_-direccion”:“Azcuenga 1995”,“地方买办”:“勘误表”,“省买办”:“勘误表”,“省买办”:3400,“通常情况下”:“shipnow”,“id”:166153,“zonaOrigen”:“AMBA”,“fecha_hora”:“2020-09-30 16:34:43”,“区”:“NEA”,“confirmada”:1,“tipo_op”:0,“汇款”:空,“服务”:“环境”