У меня есть главный компонент реагирования, который отправляет избыточное действие на componentDidMount
, действие будет извлекать данные API.
Проблема в том, что при запуске приложения мой componentDidMount
и основной компонент выполняются дважды. Таким образом, каждый раз при загрузке приложения выполняется 2 вызова API. В API есть ограничение на общее количество звонков, которые я делаю, но я не хочу достигать своего лимита.
Я уже пытался исправить проблему, удалив конструктор, используя componentWillMount
проблема не решена.
import React, { Component } from 'react';
import { connect } from 'react-redux';
import * as actions from '../redux/actions/fetchActions';
import TableHeader from './tableHeader';
class Main extends Component {
componentDidMount() {
console.log("mounted");
// this.props.dispatch(actions.fetchall("market_cap"));
}
render() {
console.log("rendered");
// console.log(this.props.cdata);
// console.log(this.props.cdata.data.data_available);
return <div className="">
<TableHeader {...this.props} />
</div>
}
}
export default Main;
/// действия
import axios from 'axios';
export function fetchall(sort) {
return function (dispatch) {
axios.get(`https://cors-anywhere.herokuapp.com/https:-----------`)
.then(function (response) {
dispatch({
type: 'FETCH_DATA',
payload: response.data
})
})
.catch(function (error) {
console.log(error);
})
}
}
// редуктор
let initialState = {
coins: [],
data_available: false,
};
export default function (state = initialState, action) {
switch (action.type) {
case 'FETCH_DATA':
return {
...state,
coins: action.payload,
data_available: true
}
default: return state;
}
}
// rootreducer
import { combineReducers } from 'redux';
import DataReducer from './dataReducer';
export default combineReducers({
data: DataReducer
});
//// индекс
import {createStore, applyMiddleware} from 'redux';
import MapStateToProps from './components/mapStateToProps';
import rootReducer from './redux/reducers/rootReducer';
import {Provider} from 'react-redux';
import thunk from 'redux-thunk';
//const initialState = {};
const middleware = [thunk];
const store = createStore(rootReducer, applyMiddleware(...middleware));
ReactDOM.render(<Provider store={store}><MapStateToProps/></Provider>, document.getElementById("root"));
консольное изображение размещено для справки, «отрендерено» зарегистрировано внутри основного компонента
"runned1" регистрируется внутри основного подкомпонента
«смонтированный», зарегистрированный внутри componentDidMount
"