this.something在组件内部未定义

时间:2018-08-06 01:53:08

标签: javascript reactjs react-native websocket redux

我在React Native上做了一个加密货币报价器。

在那个加密货币中,我正在使用Redux来管理状态。以下是相关代码:

class cryptoTicker extends Component { 

componentWillMount() {
    this.props.fetchCoin()
  }

  //Socket.io 
  componentWillUpdate() {

    var socket = openSocket('https://coincap.io');
    var updateCoinData = this.props.cryptoLoaded; 
    socket.on('trades', (tradeMsg) => {  
     for (let i=0; i<100; i++) {
       console.log(i)
      console.log("this is Update data", updateCoinData[0]["short"])
      console.log("this is socket data", tradeMsg.coin)
       if ( updateCoinData[i]["short"] === tradeMsg.coin ) {
         console.log("yolo")
       }   
     }
    })

  }

  render() {

  //Update State from websocket   
  var CryptoData = this.props.cryptoLoaded;
  let displayCrypto = CryptoData.map(el => {
    console.log(el)
    return (<CoinCard
       key={el["long"]}
       coinShortName = {el["short"]}
       coinName = {el["long"]}
       coinPrice = {el["price"].toFixed(2)}
       marketCap = {el["mktcap"]}
       percentChange = {el["perc"]}
       coinImage = {"https://coincap.io/images/coins/" + el['long'] + ".png"}
      />
    )

  })

这里this.props.cryptoLoaded;来自redux。

在这段代码中,在componentWillUpdated()内部,它引发一个错误,提示console.log("this is Update data", updateCoinData[0]["short"])(未定义)。

由于ComponentWillUpdate()是在渲染之后出现的,因此我猜测它已经加载了所有数据(渲染工作正常)。

有两个问题,我在这里做错了什么?每次执行this.props.cryptoLoaded时redux都会获取数据吗?

[更新:] 相同的Github存储库-> https://github.com/irohitb/React-native-crpto-ticker

0 个答案:

没有答案