Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是组件内部未定义的内容_Javascript_Reactjs_React Native_Websocket_Redux - Fatal编程技术网

Javascript 这是组件内部未定义的内容

Javascript 这是组件内部未定义的内容,javascript,reactjs,react-native,websocket,redux,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'); va

我在用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"}
      />
    )

  })
类cryptoTicker扩展组件{
组件willmount(){
this.props.fetchCoin()
}
//Socket.io
componentWillUpdate(){
var socket=openSocket('https://coincap.io');
var updateCoinData=this.props.cryptoLoaded;
socket.on('trades',(tradeMsg)=>{
for(设i=0;i{
控制台日志(el)
返回(
)
})
这里
this.props.cryptoLoaded;
来自redux

在这段代码中,在componentWillUpdated()中,它抛出一个错误,指出(在这里的某个地方)
console.log(“这是更新数据”,updateCoinData[0][“short”])
它是未定义的

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

所以有两个问题,我做错了什么?每次我做
this.props.cryptoLoaded
,redux都会获取数据吗


[更新:相同->
组件的Github存储库将更新(道具){
组件将装载
组件将更新
均已弃用(),并将在未来版本的react中删除。请尝试使用
componentDidMount
componentDidUpdate
,看看这是否解决了您的问题。@kingdaro在react 17中删除了它们?我使用的是react 16,所以我想这不应该是问题所在?@zerkms为什么我们需要在辩论中发送道具?无论如何,我尝试了,但同样的错误r、 我已经用我的github存储库更新了这篇文章。如果您或任何人能够找到我可能在那里做错的地方:)很抱歉,我应该提到
componentdiddupdate
在渲染之后而不是之前更新,这可能是问题所在,但可能不是。在尝试从其获取属性之前,您可能只需要检查
updatecondata[0]
是否存在