Вызов действий в componentdidUpdate - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь обновить состояние в componentdidUpdate и для этого хочу вызвать функцию, но консоль показывает ошибку типа Uncaught (in promise) TypeError: this.props.updateMarketCap is not a function

Я импортировал эту функцию в мой файл .. Ниже приведен пример:

import { fetchMarketCap } from '../Actions/Marketcap';
import { updateMarketCap } from '../Actions/Marketcap';
componentDidMount(){
    // setInterval(this.props.fetchMarketCap(), 3000);
    this.props.fetchMarketCap();
    this.interval = setInterval(() => {
      this.props.fetchMarketCap();
    }, 20000);
}
componentDidUpdate(prevProps, prevState){
    const prev = prevProps.marketcap.map((coin, i) => (
       <tr key={this.props.marketcap[i].CoinInfo.Id}>
            <td className="crypt-up"><b>{this.props.marketcap[i].DISPLAY.USD.MKTCAP}</b></td>
            <td className={coin.DISPLAY.USD.PRICE < this.props.marketcap[i].DISPLAY.USD.PRICE ? 'crypt-up' : (coin.DISPLAY.USD.PRICE > this.props.marketcap[i].DISPLAY.USD.PRICE ? 'crypt-down' : 'equal')}>{this.props.marketcap[i].DISPLAY.USD.PRICE}>{this.props.marketcap[i].DISPLAY.USD.PRICE}</td>
        </tr>
    ));

    this.props.updateMarketCap(prev);
}

И в конце файла:

const mapStateToProps = state => ({
   marketcap: state.marketcap.coins
});
export default connect ( mapStateToProps, { fetchMarketCap } )(Marketcap);

И функция действия

export const updateMarketCap = (newData) => dispatch => {
   dispatch({
      type: UPDATE_MARKET_CAP,
      payload: newData
   })
}

Я правильно импортировал типы действий и другие вещи

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Что-то должно быть не так в функции подключения, я думаю.MapDispatchToProps не определен правильно, и это провод, который соединяет ваши действия, импортированные с реквизитами, которые вы пытаетесь вызвать.

mapDispatchToProps = {
    fetchMarketCap ,
    updateMarketCap 
};
0 голосов
/ 23 февраля 2019

Вам нужно, чтобы componentDidUpdate возвращал true или false, поэтому в вашей ситуации может быть что-то вроде.Я предполагаю, что у вас есть mapDispatchToProps на этой странице, верно?

componentDidUpdate (prevProps, prevState) {

if(prevProps!==prevState){
let marketCap
marketCap = (
 const prev = prevProps.marketcap.map((coin, i) => (
   <tr key={this.props.marketcap[i].CoinInfo.Id}>
        <td className="crypt-up"><b>{this.props.marketcap[i].DISPLAY.USD.MKTCAP}</b></td>
        <td className={coin.DISPLAY.USD.PRICE < this.props.marketcap[i].DISPLAY.USD.PRICE ? 'crypt-up' : (coin.DISPLAY.USD.PRICE > this.props.marketcap[i].DISPLAY.USD.PRICE ? 'crypt-down' : 'equal')}>{this.props.marketcap[i].DISPLAY.USD.PRICE}>{this.props.marketcap[i].DISPLAY.USD.PRICE}</td>
    </tr>
));
}

this.props.updateMarketCap(prev);
}

)

Затем в вашем выражении возврата киньте {marketCap} там, где вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...