所需E币: 0
时间: 2023-12-4 13:41
大小: 3.08KB
什么是风控系统?风控系统是指一系列的完整的风险控制,以保证事情向好的方向发展,而免受不可预估的经济和财产损失而措手不及。风控类型风控类型一般分为事前、事中、事后三种。事前风控是指在交易指令发送到交易所前,对交易指令进行风险检测,通过检测的交易指令则提交到交易模块进行报单,未通过检测的交易指令将直接予以拒绝。对于追求低延时的交易策略,事前风控需要在极短的时间内完成。事中风控主要是指在交易过程中,交易团队对策略的信号生成、执行情况进行监控以及盘中对策略的风险度进行实时监控。事后风控是对交易数据在盘后进行分析,比如策略算法是否存在错误、策略的回撤是否可控、是否有计划外的持仓出现等,从而制定更严谨的业务风控预案和优化代码算法调整策略表现。在src文件夹中创建一个新文件,文件命名为“AppState.tsx”,我们将会在这个文件中创建全局state和上下文组件contexcomponent。首先,引入我们需要的react框架。interfaceAppStateValue{username:string,shoppingCart:{items:{id:number;name:string}[];};}然后,打开Header.tsx,在这个文件中我们创建一个新的函数式react组件,顺便引入我们的css样式文件importReactfrom"react";importstylesfrom"./Header.module.css";exportconstHeader:React.FC=()=>{return()}那么接下来,我们来把signin页面从路径JSX代码中挪出去,以页面组件的形式渲染出来。既然是页面,那么我们在pages文件夹中创建signin的相关页面吧。在pages文件夹中创建子文件夹signin,然后创建我们的三大金刚,index.ts,SignInPage.tsx,以及SignInPage.module.css。请同学们先打开SignInPage.tsx,我们先为页面创建一个最简单的函数式组件,组件内渲染一个H1标题,标题名称登陆页面。importReactfrom"react";exportconstSignInPage:React.FC=()=>{ return<h1>SignIn</h1>;};打开DetailPage.tsx,我们先引入react框架,创建一个最基本的函数式组件importReactfrom"react";exportconstDetailPage:React.FC=(props)=>{return(<div><h1>旅游路线详情页面</h1></div>);};这个get的返回值是一个promise。我们需要使用.then函数来处理,函数的参数是个lamda表达式,而我们关心的是响应的主体数据,也就是reponse.data,可以简单使用花括号在参数中直接展开reponse,取得data。理论上来说,响应数据data的类型应该与postman中的输出结果是一摸一样的,所以,我们把数据添加到组件state的产品列表1、2、3中。componentDidMount(){axios.get('http://123.56.149.216:8080/api/productCollections',{headers:{'x-icode':'FB80558A73FA658E',},}).then(({data})=>{this.setState({productList1:data});})}函数体内使用async,这个函数本身也必须是async,所以我们给componentDidMount加上async关键词。因为axios.get的返回值本来就是一个promise,所以我们可以给它加上await,等待get请求的执行,并取得响应数据response,而我们需要的是响应的主体数据data,可以使用花括号直接展开。于是,我们就获得了与postman一样的数据,接下来的代码就和promisethen一样了,稍微整理一下。asynccomponentDidMount(){const{data}=awaitaxios.get("http://123.56.149.216:8080/api/productCollections",{headers:{"x-icode":"FB80558A73FA658E",},});this.setState({loading:false,productList:data});}但是如果api访问错误。我们就需要使用trycatch来捕获error了,出错的时候我们同样要吧loading设置为false,但是这个时候error就要被切换为错误信息了,e.message.interfaceStateProps{loading:boolean,productList:any[],}constructor(props){super(props)this.state={loading:true,error:null,productList:[],};}asynccomponentDidMount(){try{const{data}=awaitaxios.get("http://123.56.149.216:8080/api/productCollections");this.setState({loading:false,error:null,productList1:data,});}catch(e){this.setState({loading:false,error:e.message,});}}Ok,转菊花的控制状态配置完成,接下来就要在jsx代码中转菊花了,从组件state中展开loading和error。我们依旧使用最简单的方法,直接暴力使用一个if语句,当loading为ture的时候输出转菊花,就是渲染Spin组件,设置size大小为最大,“large”。然后定义一些inlinestyleif(loading){return(<Spinsize="large"style={{marginTop:200,marginBottom:200,marginLeft:"auto",marginRight:"auto",width:"100%",}}/>);}接下来,我们来复制粘题一下代码。请同学们打开DetailPage。我们把useEffect中所有的数据请求代码全部剪切出来。复制到getProductDetail的callback函数中去。接着给dispatch加上thunkAPI。然后还有一个报错,我们需要引用axiosimport axios from "axios"; export const getProductDetail=createAsyncThunk("productDetail/getProductDetail",async(touristRouteId:string,thunkAPI)=>{thunkAPI.dispatch(productDetailSlice.actions.fetchStart());try{const{data}=await axios.get(`http://123.56.149.216:8080/api/touristRoutes/${touristRouteId}`);thunkAPI.dispatch(productDetailSlice.actions.fetchSuccess(data));}catch(error){thunkAPI.dispatch(productDetailSlice.actions.fetchFail(error.message));}});在callback函数中去掉所有的dispatch,然后也删掉trycatch,因为我们将会返回promise,让promise自己来处理。所以retun的应该是data这个对象。export const getProductDetail=createAsyncThunk("productDetail/getProductDetail",async(touristRouteId:string,thunkAPI)=>{const{data}=await axios.get(`http://123.56.149.216:8080/api/touristRoutes/${touristRouteId}`);return data;});