Javascript 如何将SocketIO检索到的JSON数据传递到React中的路由?
我需要获取路由中的变量,以便根据JSON数据进行更新,有时还需要发出数据,但我还没有弄清楚如何将Javascript 如何将SocketIO检索到的JSON数据传递到React中的路由?,javascript,json,reactjs,react-router,flask-socketio,Javascript,Json,Reactjs,React Router,Flask Socketio,我需要获取路由中的变量,以便根据JSON数据进行更新,有时还需要发出数据,但我还没有弄清楚如何将response传递给我的路由进行访问 获取JSON的App.js文件: import React, { useState, useEffect } from 'react'; import { Router } from 'react-router-dom'; import { createBrowserHistory } from 'history'; import { ThemeProvider
response
传递给我的路由进行访问
获取JSON的App.js文件:
import React, { useState, useEffect } from 'react';
import { Router } from 'react-router-dom';
import { createBrowserHistory } from 'history';
import { ThemeProvider } from '@material-ui/styles';
import validate from 'validate.js';
import theme from './theme';
import 'react-perfect-scrollbar/dist/css/styles.css';
import './assets/scss/index.scss';
import validators from './common/validators';
import Routes from './Routes';
import socketIOClient from "socket.io-client";
const ENDPOINT = "http://127.0.0.1:5000";
const browserHistory = createBrowserHistory();
validate.validators = {
...validate.validators,
...validators
};
function App() {
const [response, setResponse] = useState("");
useEffect(() => {
const socket = socketIOClient(ENDPOINT);
socket.emit('test', {"name": "jim"})
socket.on("test_client", data => {
setResponse(data);
});
}, []);
return (
<ThemeProvider theme={theme}>
<Router history={browserHistory}>
<Routes />
</Router>
</ThemeProvider>
);
}
export default App;
import React,{useState,useffect}来自“React”;
从“react Router dom”导入{Router};
从“历史”导入{createBrowserHistory};
从'@material ui/styles'导入{ThemeProvider};
从“validate.js”导入validate;
从“/theme”导入主题;
导入“react perfect scrollbar/dist/css/styles.css”;
导入“/assets/scss/index.scss”;
从“./common/validators”导入验证程序;
从“./Routes”导入路由;
从“socket.io客户端”导入socketIOClient;
常量端点=”http://127.0.0.1:5000";
const browserHistory=createBrowserHistory();
validate.validators={
…验证.validator,
…验证器
};
函数App(){
const[response,setResponse]=useState(“”);
useffect(()=>{
const socket=socketIOClient(端点);
emit('test',{“name”:“jim”})
socket.on(“测试客户端”,数据=>{
setResponse(数据);
});
}, []);
返回(
);
}
导出默认应用程序;
Routes.js,其中创建了路由:
import React from 'react';
import { Switch, Redirect } from 'react-router-dom';
import { RouteWithLayout } from './components';
import { Main as MainLayout, Minimal as MinimalLayout } from './layouts';
import {
Login as LoginView,
Dashboard as DashboardView,
Trading as TradingView,
OrderHistory as OrderHistoryView,
Account as AccountView,
Settings as SettingsView,
NotFound as NotFoundView
} from './views';
const Routes = () => {
return (
<Switch>
<Redirect
exact
from="/"
to="/dashboard"
data={props.response}
/>
<RouteWithLayout
component={LoginView}
exact
layout={MinimalLayout}
path="/login"
data={props.response}
/>
<RouteWithLayout
component={DashboardView}
exact
layout={MainLayout}
path="/dashboard"
data={props.response}
/>
<RouteWithLayout
component={TradingView}
exact
layout={MainLayout}
path="/trading"
data={props.response}
/>
<RouteWithLayout
component={OrderHistoryView}
exact
layout={MainLayout}
path="/orderhistory"
data={props.response}
/>
<RouteWithLayout
component={AccountView}
exact
layout={MainLayout}
path="/account"
data={props.response}
/>
<RouteWithLayout
component={SettingsView}
exact
layout={MainLayout}
path="/settings"
data={props.response}
/>
<RouteWithLayout
component={NotFoundView}
exact
layout={MinimalLayout}
path="/not-found"
data={props.response}
/>
<Redirect to="/not-found" />
</Switch>
);
};
export default Routes;
从“React”导入React;
从“react router dom”导入{Switch,Redirect};
从“./components”导入{RouteWithLayout};
从“/layouts”导入{Main as MainLayout,Minimal as MinimalLayout};
进口{
以LoginView登录,
仪表板作为仪表板视图,
作为TradingView进行交易,
OrderHistory作为OrderHistoryView,
帐户作为AccountView,
设置为设置视图,
NotFound作为NotFoundView
}来自“./视图”;
常数路由=()=>{
返回(
);
};
导出默认路径;
<Routes data={response} />
Routes.js:
const Routes = ({ data }) =>
...
<RouteWithLayout
// pass props here
component={routeProps => <LoginView {...routeProps} data={data} />}
exact
layout={MinimalLayout}
path="/login"
/>
...
}
const Routes=({data})=>
...
}
准确的
布局={minimalayout}
path=“/login”
/>
...
}
通过PropsMethod将其传递给路由器,而不是路由。。把它传给你的实际路线。或者如果你想要quazi global的东西,你可以使用contextso just,然后在我的路线中,我可以使用{props.response.name}例如,道具不是魔法。传递和访问它们就像将参数从一个函数传递到另一个函数一样。我将此添加到每个路由中,但由于路由中有组件,例如Dashboard
有一个TotalProfit
组件,它显示我需要JSON在其中,我是否也可以将此道具传递到TotalProfit
组件中?我不确定是否明白您的问题。如果你在TotalProfits
中需要这些信息,如果你不传递道具,它怎么可能到达那里?它就像一个函数。。。如果一个函数不是封闭的或者你没有传递参数,它怎么能访问呢?我猜我一直假设道具会自动从父组件传递到子组件,显示子组件