如何使用react redux发出post请求?

2023-12-31

我创建了一个包含电子邮件、名字、姓氏详细信息的表单。现在我想向localhost:5000/api/users并想将其存储在 mongo 数据库中。我如何使用 redux ?我只在reactjs上实现了它,我怎样才能使用redux?注意:我正在使用 redux thunk。

Code:

登录.js:

import React, { Component } from 'react'
import './login.css'

export default class Login extends Component {

  constructor(props) {
    super(props)
    this.state = {
      firstName:'',
      lastName:'',
      email:''
    }

    this.onChangeHandler = this.onChangeHandler.bind(this)
    this.onSubmitHandler = this.onSubmitHandler.bind(this)
  }

  onChangeHandler(e){
    this.setState({ [e.target.name]: e.target.value })
  }

  onSubmitHandler(e){
    e.preventDefault();
    console.log(this.state)
  }

  render() {
    return (
      <div>
        <form onSubmit={this.onSubmitHandler}>
          <label>
            FirstName:
            <input type="text" name="firstName" value={this.state.firstName} onChange={this.onChangeHandler} />
          </label>

          <label>
            LastName:
            <input type="text" name="lastName" value={this.state.lastName} onChange={this.onChangeHandler} />
          </label>

          <label>
            Email:
            <input type="text" name="email" value={this.state.email} onChange={this.onChangeHandler} />
          </label>
          <button type="submit" className="btn btn-default">Submit</button>
        </form>
      </div>
    )
  }
}

登录操作.js:

import { ADD_USER } from './types';
import axios from 'axios';

export const userLoginRequest = () => dispatch => {
    axios.post(`localhost:5000/api/users`)
    .then( userdata => 
        dispatch({
            type: ADD_USER,
            payload: userdata
        })
    )
    .catch( error => {
        console.log(error);
    });
};

登录Reducer.js:

import { ADD_USER } from '../actions/types';

const initialState = {
    firstName: '',
    lastName: '',
    email: ''
}


export default function (state = initialState, action) {
    switch (action.type) {
        case ADD_USER:
            return {
                ...state,
                items: action.payload
            };
        default:
            return state;
    }
}

我不明白我是否需要为名字、姓氏和电子邮件分别创建 3 个操作?在这种情况下,这 3 个操作将是什么,每个操作都有 3 个 POST 请求吗?


我建议您对以下内容有一些了解redux and redux-thunk。 为了发出网络请求,您需要使用中间件,例如redux-thunk or redux-saga;

这是非常基本的例子redux-thunk

//example 1
function myThunkActionCreator(someValue) {
    return (dispatch, getState) => {
        dispatch({type : "REQUEST_STARTED"});

        myAjaxLib.post("/someEndpoint", {data : someValue})
            .then(
                response => dispatch({type : "REQUEST_SUCCEEDED", payload : response}),
                error => dispatch({type : "REQUEST_FAILED", error : error})
            );    
    };
}

// example 2 for conditional dispatching based on state
const MAX_TODOS = 5;

function addTodosIfAllowed(todoText) {
    return (dispatch, getState) => {
        const state = getState();

        if(state.todos.length < MAX_TODOS) {
            dispatch({type : "ADD_TODO", text : todoText});
        }    
    }
}

Update

因此,使用以下方式将表单数据发布到服务器的流程redux-thunk像这样

  1. 当单击提交按钮并调度操作时让我们假设SAVE_USER_TO_SERVER并将包含所有用户详细信息(姓名、电子邮件等)的对象传递给例如postUserThunkCreator()(这是一个 thunk 函数,如上面的示例所示)。

  2. 然后 thunk 向服务器发出 post 请求并发送数据。在服务器端,它被保存到数据库中并返回响应

  3. Now myAjaxLib.post("/someEndpoint", {data : someValue}).then() in .then()功能,您可以检查响应,如果成功则调度另一个操作,例如SAVE_USER_TO_SERVER_SUCCESS否则SAVE_USER_TO_SERVER_FALIURE;

*我们可以看到此工作流程中正在分派三个操作,即:SAVE_USER_TO_SERVER

SAVE_USER_TO_SERVER_SUCCESS

SAVE_USER_TO_SERVER_FALIURE

因此,我希望您清楚要创建上述三个操作。

你的问题我是否需要为名字、姓氏和电子邮件分别创建 3 个操作?

Answer:一点也不。只有上面提到的三个动作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用react redux发出post请求? 的相关文章

随机推荐