0
我有2個主要組件,Home
和Login
。reactjs在頁面加載ajax調用,console.log等從accross組件調用,即使這些組件不被執行
Login
:登錄用戶,並重定向到家裏組件
Home
:沒有API調用獲取一些數據。我有一個console.log()
。 console.log
在Login
和Home
組件上都得到執行,即使它僅存在於Login
組件上。我有getData()
方法。 getData()
方法在Login
和Home
組件上都得到執行,即使它僅存在於Home
組件上。
我不知道如果這是做減肥補水。有沒有辦法阻止在不同的組件上執行特定組件的獨特操作?
店:
import { createStore, applyMiddleware, combineReducers } from 'redux';
import thunk from 'redux-thunk';
import logger from 'redux-logger';
import reducer from './reducer';
import homeReducer from './homeReducer';
import {autoRehydrate, persistStore} from 'redux-persist';
import localForage from 'localforage';
const store = createStore(
combineReducers({
reducer,
homeReducer
}),
{},
applyMiddleware(thunk, logger),
autoRehydrate()
);
persistStore(store, {storage: localForage})
export default store;
登錄組件:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { login, setLogingSuccess } from '../../actions/loginActions';
import {Header} from '../Shared/header';
import PropTypes from 'prop-types';
import cookies from 'universal-cookie';
class LoginForm extends Component {
constructor(props) {
super(props);
this.state = {
//...
};
}
componentDidMount(){
console.log('login component');
//...
}
componentWillReceiveProps(nextProps) {
//...
}
render() {
//...
return (
<div className="col-md-6 col-md-offset-3" onSubmit={this.onSubmit}>
<h3>Login</h3>
<form name="LoginForm">
<label htmlFor="email">Email:</label>
<input
className="form-control"
type="email"
name="email"
value={this.state.email}
onChange={e => this.setEmail(e)}
/>
<br />
<label>Password:</label>
<input
className="form-control"
type="password"
name="password"
onChange={e => this.setPassword(e)}
/>
<br />
//...
</form>
</div>
);
}
};
//...
}
LoginForm.propTypes = {
//...
};
const mapStateToProps = state => {
return {
//...
};
};
const mapDispatchToProps = dispatch => {
return {
//...
};
};
export default connect(mapStateToProps, mapDispatchToProps)(LoginForm);
首頁組件:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import axios from 'axios';
import Header from '../Shared/header';
import {
//...
} from '../../actions/homeActions';
class Home extends Component {
constructor(props) {
super(props);
this.state = {
//...
};
}
componentDidMount(){
this.getData();
}
componentWillReceiveProps(nextProps) {
//...
}
render() {
return (
<div className="col-md-6 col-md-offset-3">
<Header />
<div>
<h3>Home</h3>
</div>
</div>
);
}
getData = function(){
axios.get('/_/data/')
.then(success =>{
console.log(success);
})
.catch(error =>{
console.log(error)
});
};
}
Home.propTypes = {
//...
};
const mapStateToProps = state => {
return {
//...
};
};
const mapDispatchToProps = dispatch => {
return {
//..
};
};
export default connect(mapStateToProps, mapDispatchToProps)(Home);
index.js:
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import store from './redux/store';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import LoginForm from './components/LoginForm/LoginForm';
import Home from './components/HomePage/home';
class App extends React.Component {
render() {
return (
<Provider store={store}>
<BrowserRouter>
<div>
<Route />
<Switch>
<Route exact path={'/'} component={Home} />
<Route path={'/login'} component={LoginForm} />
<Route path="*" component={LoginForm} />
</Switch>
</div>
</BrowserRouter>
</Provider>
);
}
}
render(<App />, document.getElementById('root'));
顯示,安裝代碼的一部分'LoginForm' – FuzzyTree
@FuzzyTree登錄表單和家庭由路由器管理:https://jsfiddle.net/mx29aL97/ –