반응형
setState를 다른 구성 요소로 전달하는 방법
리액션 나는 리듀렉스 & 리액션으로 간단한 앱을 만들었어.Action.js 파일에서 State를 설정한 다음 구성 요소에서 사용하려고 하는 것뿐입니다.
문제는 내가 어떻게 해야 할지 모른다는 것이다.errors에 대해 논하다.catch setState그리고 나는 이미 레이아웃 컴포넌트에 이렇게 디피케이션을 했다.
this.props.postUsers(this.state.username,this.state.password,this.state.errors)
이것이 setState를 다른 구성요소로 전달하는 올바른 방법인지 모르겠다.
참고: 나는 Reducx-promise-middleware를 사용하고 있는데, 그것은 _PENDING & _FULFULLED & _REVELUMED & _REVENTED _ REVENTED _ REVENTED
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/sshd/sshd.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/remitchers/userRimenscers.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();
구성 요소 외부에서 구성 요소의 상태를 설정할 수 있는지 잘 모르겠어.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/sshd/sshd.js
...
handlePostUsers(e){
e.preventDefault();
this.props.postUsers(
this.state.username,
this.state.password,
this.state.errors,
(responseData)=>{this.setState({errors: responseData})
});
}
...
참조URL: https://stackoverflow.com/questions/48298605/how-to-pass-setstate-to-another-component
반응형
'Programing' 카테고리의 다른 글
| 기본 반응:구성 요소 항상 실행 (0) | 2022.04.08 |
|---|---|
| "유니코드 오류 "유니코드 이스케이프" 코덱이 바이트를 디코딩할 수 없음...Python 3에서 텍스트 파일을 열 수 없음 (0) | 2022.04.08 |
| Vue-Router를 사용하여 Vue에서 URL 쿼리 매개 변수를 설정하는 방법 (0) | 2022.04.08 |
| 고정되지 않고 고정된 개체에서 키를 설정하려고 시도한 경우 (0) | 2022.04.08 |
| Python -m Simple에 해당하는 Python 3는 무엇인가?HTTPServer" (0) | 2022.04.08 |