gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:22:38 26 4
gpt4 key购买 nike

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

代码:

登录.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>
)
}
}

loginAction.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);
});
};

loginReducer.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 个 Action 将是什么?每个 Action 中有 3 个 POST 请求吗?

最佳答案

我建议你对 reduxredux-thunk 有一些了解。要发出网络请求,您需要使用 redux-thunkredux-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});
}
}
}

更新

所以使用 redux-thunk 将表单数据发布到服务器的流程是这样的

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

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

  3. 现在 myAjaxLib.post("/someEndpoint", {data : someValue}).then().then() 函数中你可以检查如果成功则响应 为 SAVE_USER_TO_SERVER_SUCCESS 发送另一个操作,否则 SAVE_USER_TO_SERVER_FALIURE;

*所以我们可以看到在这个工作流程中 bieng dipatched 三个 Action ,即:SAVE_USER_TO_SERVER

SAVE_USER_TO_SERVER_SUCCESS

SAVE_USER_TO_SERVER_FALIURE

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

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

回答:一点也不。以上只有三个 Action 。

关于reactjs - 如何使用 react redux 发出 post 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53100829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com