Javascript React App JS-如何引用静态JSON文件
在JS中,我指的是远程服务器上的文件,如: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'
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,“汇款”:空,“服务”:“环境”