【发布时间】:2020-01-22 06:39:30
【问题描述】:
我正在使用 nodejs 的 giphy-api 模块,我想传递这些数据来做出反应。
我有两个组件:
Api.js 是与 node.js 成功连接并返回包含所有 API 数据的回调。 App.js 是主要组件。我导入 Api.js 并且当我 console.log 这个回调消息它工作。 我尝试了 props 和 states 但因为 Api.js 返回一个 Callback 我不知道如何使用它。
Api.js
import openSocket from "socket.io-client";
const socket = openSocket("http://localhost:5000/");
function connect(cb) {
// listen for any messages coming through
// of type 'chat' and then trigger the
// callback function with said message
socket.on("chat", message => {
// trigger the callback passed in when
// our App component calls connect
cb(message);
});
}
export { connect };
App.js:
import React from 'react';
import { connect } from './api';
import './App.css';
class App extends React.Component {
constructor(props) {
super(props);
// call our connect function and define
// an anonymous callback function that`
// simply console.log's the received
// message
var gifs = connect(message => {
console.log(message);
});
this.state = {
books: [
{
name: 'Zero to one',
isbn: '9780804139298',
author: 'Peter Thiel',
cover: 'https://images.gr-assets.com/books/1414347376l/18050143.jpg',
status: false
}
],
gipphy: gifs
};
}
render () {
return (
<div className=".App-logo">
<li className=".App-logo">
<img src={ this.state.books[0].cover} alt="gipphy.com animations"/>
<img src={ this.state.gifs[0].images.original.url} alt="gipphy.com animations"/>
</li>
</div>
)
}
}
export default App;
TypeError: 无法读取 null 的属性“gipphy”
现在 console.log 是未定义的
【问题讨论】:
-
似乎问题出在
this.state.gifs[0]。是否需要在 state 中定义 gifs(目前是在 state 中定义 books 和 giphy)? -
打印什么
console.log(message);? -
您好,请检查我的解决方案,如果有帮助,请告诉我。
-
这是我的第一个真正的 React 应用,但我仍然不太了解状态。我不确定我是否真的需要它,但我认为问题在于 Api.js 处理回调并且不使用返回的方式。 ps:我试图让它返回但没有工作。
标签: javascript reactjs socket.io callback