- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 React 的新手,我使用 Redux 和 React 构建了一个简单的应用程序。我只是想在 Action.js 文件中设置状态,然后在组件中使用它。
问题是我不知道如何将 errors
参数定义为 catch setState
并且我已经像这样在布局组件中定义了它
this.props.postUsers(this.state.username,this.state.password,this.state.errors)
我不知道这是否是将 setState 传递给另一个组件的正确方法。
Note: I'm using redux-promise-middleware it adds _PENDING & _FULFILLED & _REJECTED by it's own.
src/actions/userActions.js
export function postUsers(username, password, errors) {
let users = {
username,
password,
};
let self = this;
return{
type: "USERS_POST",
payload: axios({
method:'POST',
url: url,
data: users,
contentType: 'application/json',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then(success => {
console.log('sucesssssssss', success)
})
.catch(({response}) => {
self.setState({errors: response.data});
})
}
}
src/components/layout.js
import React, {Component} from 'react';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
import { postUsers } from '../actions/usersAction';
class Layout extends Component {
constructor(props){
super(props);
this.state = {
username: '',
password: '',
errors: [],
}
}
onUserUpdate(filed, event){
if (filed === 'username') {
this.setState({
username: event.target.value
});
}
if (filed ==='password') {
this.setState({
password: event.target.value
});
}
}
handlePostUsers(e){
e.preventDefault();
this.props.postUsers(this.state.username,this.state.password,this.state.errors)
}
render() {
console.log('this.state.errors',this.state.errors);
return (
<div className="App">
<input name="username" onChange={this.onUserUpdate.bind(this, 'username')}/>
<input name="username" onChange={this.onUserUpdate.bind(this, 'password')}/>
<button onClick={(e) => this.handlePostUsers(e)}>Go ahead</button>
</div>
);
}
}
function mapStateToProps(state) {
return {
act: state.users,
};
}
function matchDispatchToProps(dispatch) {
return bindActionCreators({postUsers}, dispatch)
}
export default connect(mapStateToProps, matchDispatchToProps)(Layout);
src/reducers/userReducers.js
const initalState = {
fetching: false,
fetched: false,
users: [],
error: []
};
export default function(state=initalState, action) {
switch(action.type){
case "USERS_POST_PENDING":{
return {...state, fetching: true,}
}
case "USERS_POST_FULFILLED":{
return {...state, fetching: false,fetched: true, users:[...state.users, action.payload],}
}
case "USERS_POST_REJECTED":{
return {...state, fetching: false, error: action.payload,}
}
default:
return state;
}
}
src/reducers/index.js
import { combineReducers } from 'redux';
import usersReducer from './usersReducer';
import tweetsReducer from './tweetsReducer';
export default combineReducers({
users: usersReducer,
tweets: tweetsReducer,
})
src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { createStore, applyMiddleware } from 'redux'
import thunk from 'redux-thunk';
import logger from 'redux-logger';
import promise from 'redux-promise-middleware';
import reducers from './reducers/index';
import { Provider } from 'react-redux';
import registerServiceWorker from './registerServiceWorker';
import Layout from './components/layout';
const store = createStore(reducers, applyMiddleware(promise(),thunk, logger,loadingBarMiddleware()));
const app = document.getElementById('root');
ReactDOM.render(
<Provider store={store}>
<Layout />
</Provider>
,app);
registerServiceWorker();
最佳答案
我不确定您是否可以从组件外部设置组件的状态。您可能应该将 handle 函数从 layout.js 传递给 userActions.js
所以代码应该变成:
src/actions/userActions.js
export function postUsers(username, password, errors, errorFunction) {
let users = {
username,
password,
};
let self = this;
return{
type: "USERS_POST",
payload: axios({
method:'POST',
url: url,
data: users,
contentType: 'application/json',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then(success => {
console.log('sucesssssssss', success)
})
.catch(({response}) => {
errorFunction(response.data);
})
}
}
src/components/layout.js
...
handlePostUsers(e){
e.preventDefault();
this.props.postUsers(
this.state.username,
this.state.password,
this.state.errors,
(responseData)=>{this.setState({errors: responseData})
});
}
...
关于javascript - 如何将 setState 传递给另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48298605/
我可以在传递给 this.setState() 的回调定义中显式调用 this.setState() 吗? this.setState( { openA:true }, () => {
我有一个从 api 获取数据的场景。在这种情况下,每当我从商店获取新值时,我的 componentWillReceiveProps() 就会被触发。 componentWillReceiveProps
在这个 componentDidUpdate 方法中,在执行 setState 将引号设置为从 fetch 返回的内容后,我必须使用回调再次执行 setState 以将 randomQuoteInde
正如 another question 中向我指出的那样,如果我在 setState、randomQuoteIndex() 中有一个不带参数的函数调用,并且该函数使用该 setState 中设置的状态
问题:当我使用 this.setState 并在回调中输出状态时,它根本不会改变,但是当我将 setstate 嵌套在 setstate 中时,它就会正常工作。 例子:这行不通- this.setSt
这个问题在这里已经有了答案: Why does setState take a closure? (2 个答案) 关闭 4 年前。 我对这两者的区别还是有点迷惑 isBusy = false;
当我使用 setState () 文本出现在调试控制台中.. setState() callback argument returned a Future. The setState() method
这个问题已经有答案了: Are 'Arrow Functions' and 'Functions' equivalent / interchangeable? (4 个回答) React - unca
之间的区别 - this.setState({value: 'xyz', name: 'john', color: 'orange'}) 对比 setValue('xyz'); setName('jo
之间的区别 - this.setState({value: 'xyz', name: 'john', color: 'orange'}) 对比 setValue('xyz'); setName('jo
我在运行代码时收到以下警告: Line 48: Do not mutate state directly. Use setState() react/no-direct-mutation-state
我是 React 的新手,我注意到我们使用 this.setState() 而不是 super.setState() 请我清楚地解释为什么我们用它来调用父类(super class)方法??示例: c
我一生都无法在我的 react 组件中传递这个 TypeError 。我已阅读所有相关主题并实现了几乎所有建议的修复,但均无济于事。 import React, { Component } from
我知道这可能是一个 JavaScript 问题而不是 React 问题,但我无法理解 React setState 的上述签名。 函数参数列表中的方括号和逗号有什么作用? 我知道如何将它与更新程序一起
是否可以在this.setState的回调中调用this.setState? 我正在制作一个 Roguelike Dungeon 并有一个设置,其中在 this.setState 的回调中使用了一个辅
我正在使用 react-navigation 进行路由。在一个组件上,我尝试设置 navigationOptions 以显示汉堡包按钮以打开和关闭侧边栏(抽屉)。所以 onPress 我试图为我的侧边
在之前的 React 版本中,我们可以在状态更改后执行代码,方法如下: setState( prevState => {myval: !prevState.myval}, () => { co
有一个 react 问卷组件,它将选定的答案添加到 this.state = {answer: []} 中,效果很好。同时,当用户更新答案时,它会添加为另一个对象。当questionID相同时,是否有
我正在使用 WebSocket 与我的服务器进行通信,并在我的 handleSubmit() 函数上输入一些值,并在此基础上与服务器进行通信并将我的状态更新为数据从 ws 收到。所以,第一次,一切都工
componentDidMount(prevProps, prevState, prevContext) { let [audioNode, songLen] = [this.refs.aud
我是一名优秀的程序员,十分优秀!