redux를 사용한 Axios 요청

redux global을 사용한 Axios 요청

플랫폼 구축

압축을 풀다

명령줄을 열고 종속 패키지 설치

asl 및

데이터베이스 가져오기

데이터베이스 구성 조정

시험

http://localhost:3001/api/getgoods

교차 도메인

정의: 이전 블로그에서 쿼리 가능

토큰 원칙: 프로젝트 소개, 인터페이스 문서, JWT 사용

동일 출처 정책(Same origin policy)은 브라우저의 핵심이자 가장 기본적인 보안 기능인 규약으로, 동일 출처 정책이 누락될 경우 브라우저의 정상적인 기능에 영향을 미칠 수 있습니다. 웹은 동일 출처 정책을 기반으로 구축되었으며 브라우저는 동일 출처 정책의 구현일 뿐이라고 말할 수 있습니다. 기본적으로 모든 사이트에서 로드된 신뢰할 수 있는 콘텐츠는 안전하지 않은 것으로 간주합니다. 브라우저에 의심스러운 스크립트가 샌드박스에서 실행될 때 악의적일 수 있는 다른 사이트의 리소스가 아닌 동일한 사이트의 리소스에만 액세스하도록 허용해야 합니다. 소위 동일한 출처는 동일한 도메인 이름, 프로토콜 및 포트를 나타냅니다.

반응 스캐폴딩의 두 가지 교차 도메인: 교차 및 교차 호출에 대한 솔루션 - 프로그래머 구함

도메인 간 문제

방법 1

package.json을 통한 교차 도메인

방법 2

방법 1은 교차 도메인을 달성했지만 충분히 유연하지 않으며 전역적으로 하나의 교차 도메인 주소만 설정할 수 있습니다.

타사 플러그인을 사용하여 http-proxy-middleware도메인 간 유연하게 사용할 수 있습니다.

npm i http-proxy-middleware -D
npm install --save-dev http-proxy-middleware

교차 도메인 파일을 구성하려면 src 디렉토리에 고정 쓰기로 setupProxy.js 파일을 생성해야 합니다.

const createProxyMiddleware  = require('http-proxy-middleware');
module.exports = function(app){
        app.use(createProxyMiddleware('/api',{
            target: 'http://127.0.0.1:3001' 
        })       
    )
}

설치하다

npm 나는 축 -S

axios({
    url: "url",
    method: "post",
    headers: {},
    data: {}
}).then(res=>{
​
}).catch(error=>{
​
})

얻다

axios.get('http://localhost:3001/api/getgoods',{headers:{},params:{}}).then(res=>{
    console.log(res)
}).catch(error=>{
    console.log(error)
})

우편

axios.post('http://localhost:3001/api/getgoods',headers:{},data:{}).then(res=>{
    console.log(res)
}).catch(error=>{
    console.log(error)
})
axios.post(url).then(res=>{})

캡슐화

import axios from "axios";
import {Component} from "react";

// axios.defaults.baseURL = "/api"

axios.interceptors.response.use(response=>{
    return response.data
})

Component.prototype.$http = axios

export default axios

술책

액시오스와 유사

가져오기는 고급 브라우저 >IE8.0에서 데이터 요청을 보내기 위한 내장 API입니다.

가져오기의 맨 아래 레이어는 Promise를 기반으로 합니다.

가져오기는 여전히 동일 출처 정책에 의해 제한됩니다.

얻다

var url = '/api/getgoods'
fetch(url).then(
    res=>{
        return res.json()//当前步骤只是接受到了响应对象,不能在这里看到响应数据
    }
).then(
    res=>{
        console.log(res,"++++++++++++++++++++++++++++")
    }
)

fetch는 기본 get 요청이므로 요청 헤더 설정 부분은 생략 가능하며, 전체 작성 방법은 다음과 같습니다.

var url = '/api/getgoods'
fetch(url,{
    method: "GET",
    headers: {}
}).then(
    res=>{
        return res.json()//当前步骤只是接受到了响应对象,不能在这里看到响应数据
    }
).then(
    res=>{
        console.log(res,"++++++++++++++++++++++++++++")
    }
)

우편

var url = '/api/getgoods'
fetch(url,{
    method: "POST",
    headers: {
        'Content-Type': "application/json"
    },
    body: JSON.stringify({
        username: "root",
        password: "123"
    }),
}).then(
    res=>{
        return res.json()//当前步骤只是接受到了响应对象,不能在这里看到响应数据
    }
).then(
    res=>{
        console.log(res,"++++++++++++++++++++++++++++")
    }
)

캡슐화

패키지 코드

export function request(url,method="GET",body={},headers={}){
    const option = {
        method,
        headers: Object.assign({"Content-Type": "application/json"},headers)//合并对象,设置默认头
    }
    if(method === "POST"){
        option.body = JSON.stringify(body)
    }
    return fetch(url,option).then(response=>{
        return response.json()
    })
}

사용

글로벌 데이터 제어 반응(redux)

Redux는 구성 요소 간에 공유해야 하는 일부 데이터를 관리하는 데 도움이 되는 반응 상태 관리 도구입니다.

다운로드

npm i redux -S

기본 구조

import {createStore} from 'redux'
const init_list = [
    {
        id:3,
        name: "张三",
        age: 18
    },
    {
        id:2,
        name: "李四",
        age: 18
    },
    {
        id:1,
        name: "王五",
        age: 18
    }
]
function personList(state = init_list,action){
    switch (action.type){
        case 'insert':
            console.log("这里是插入")
            break
        case 'delete':
            console.log("这里是删除")
            break
        case 'update':
            console.log("这里是修改")
            break
        case 'select':
            console.log("这里是条件查询")   
            break 
        default:
            return state
    }
}
const store = createStore(personList) //创建一个store对象
export default store

객체 저장

일반적인 방법

getState 获取store当中的数据
dispatch 传入剧本,调用store封装的函数的指定部分

기본 기능

완전한 케이스

목록 데이터의 추가, 삭제, 수정 및 조회

형식 정의

npm i antd -S

확인하다

import React, { Component } from 'react'
import store from '../redux'
import { Table, Input } from 'antd';
import '../asserts/css/layout.css'
export default class Layout extends Component {
    state = {
        dataSource: [],
        columns: [
            {
                title: '编号', //表头字段
                dataIndex: 'id', //调用数据对应的字段 table.id
            },
            {
                title: '姓名',
                dataIndex: 'name',

            },
            {
                title: '年龄',
                dataIndex: 'age',

            },
        ]
    }
    UNSAFE_componentWillMount() {
        this.setState({
            dataSource: store.getState()
        });
    }
    render() {
        return (
            <>
                <div class="yangshi">
                    <Input placeholder="Basic usage" />
                    <Table 
                       dataSource={this.state.dataSource} 
                       columns={this.state.columns} 
                    />
                </div>
            </>
        )
    }
}

증가하다

1. 동일한 객체를 여러 번 반환할 수 없으며, reduser에서는 원래 상태로 반환할 수 없습니다.

2. reduser에 의해 반환된 데이터는 store.getState()에 의해 얻어지는데, dispatch를 가리키고 나서 얻은 것은 dispatch에 의해 수정된 데이터입니다.

아래와 같이 코드 쇼:

감속기 코드

리덕스/index.js

import {createStore} from 'redux'
const init_list = [
    {
        id:3,
        name: "张三",
        age: 18
    },
    {
        id:2,
        name: "李四",
        age: 18
    },
    {
        id:1,
        name: "王五",
        age: 18
    }
]
function personList(state = init_list,action){
    switch (action.type){
        case 'insert':
            var id = state.length>0?state[0].id+1:1
            let {name,age} = action.data
            var obj = {
                id: id,
                name:name,
                age:age
            }
            return [obj,...state] 
            //不能多次返回同一个对象,在reduser当中,不可以返回原生的state
        case 'delete':
            console.log("这里是删除")
            break
        case 'update':
            console.log("这里是修改")
            break
        default:
            return state
    } 
}
const store = createStore(personList) //创建一个store对象
export default store

레이아웃.jsx

import React, { Component } from 'react'
import store from '../redux'
import { Table, Input,Form,Button } from 'antd';
import '../asserts/css/layout.css'
export default class Layout extends Component {
    state = {
        dataSource: [],
        columns: [
            {
                title: '编号', //表头字段
                dataIndex: 'id', //调用数据对应的字段 table.id
            },
            {
                title: '姓名',
                dataIndex: 'name',

            },
            {
                title: '年龄',
                dataIndex: 'age',

            },
        ]
    }
    UNSAFE_componentWillMount() {
        this.setState({
            dataSource: store.getState()
        });
    }
    submit(value){
        store.dispatch({
            type: 'insert',
            data: value
        })
        this.setState({
            dataSource: store.getState()
        });
    }
    render() {
        return (
            <>
                <div className="yangshi">
                    <Form
                        name="basic"
                        labelCol={
   
   { span: 8 }}
                        wrapperCol={
   
   { span: 16 }}
                        initialValues={
   
   { remember: true }}
                        autoComplete="off"
                        onFinish={this.submit.bind(this)}
                    >
                        <Form.Item
                            label="用户名"
                            name="name"
                        >
                            <Input />
                        </Form.Item>

                        <Form.Item
                            label="年龄"
                            name="age"
                        >
                            <Input />
                        </Form.Item>

                        <Form.Item wrapperCol={
   
   { offset: 8, span: 16 }}>
                            <Button type="primary" htmlType="submit">
                                保存
                            </Button>
                        </Form.Item>
                    </Form>

                    <Table 
                       dataSource={this.state.dataSource} 
                       columns={this.state.columns} 
                    />
                </div>
            </>
        )
    }
}

변화

삭제

추천

출처blog.csdn.net/qq_48469083/article/details/121338766