我没有看到任何与之相关的问题;可能已经有你答案的问题"并且研究过' facebook.github.io',但我对使用哪种方式' interval'感到困惑。在我的情况下。我将ES5应用程序转换为在线课程中的ES6应用程序。所以,ES5代码是:
var React = require('react');
var ReactDOM = require('react-dom');
var GuineaPigs = require('../components/GuineaPigs');
var GUINEAPATHS = [
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-1.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-2.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-3.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-4.jpg'
];
var GuineaPigsContainer = React.createClass({
getInitialState: function () {
return { currentGP: 0 };
},
nextGP: function () {
var current = this.state.currentGP;
var next = ++current % GUINEAPATHS.length;
this.setState({ currentGP: next });
},
interval: null,
componentDidMount: function () {
this.interval = setInterval(this.nextGP, 5000);
},
componentWillUnmount: function () {
clearInterval(this.interval);
},
render: function () {
var src = GUINEAPATHS[this.state.currentGP];
return <GuineaPigs src={src} />;
}
});
ReactDOM.render(
<GuineaPigsContainer />,
document.getElementById('app')
);
而且,到目前为止,我在ES6中所拥有的是:
import React from 'react'
import GuineaPigs from './GuineaPigs';
const GUINEAPATHS = [
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-1.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-2.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-3.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-4.jpg'
];
class GuineaPigsContainer extends React.Component {
constructor(props) {
super(props);
this.state = { currentGP: 0 };
this.nextGP = this.nextGP.bind(this);
}
nextGP () {
let current = this.state.currentGP;
let next = ++current % GUINEAPATHS.length;
this.setState({ currentGP: next });
}
setInterval () {
null
}
}
export default GuineaPigsContainer;
我正在寻找有关如何处理此示例的指针,甚至可能指向有关此主题的文档。感谢您提供的任何帮助。
答案 0 :(得分:0)
上面的ES5写入ES6,如下所示;无论如何它是setInterval问题或任何问题:
import React from 'react';
import ReactDOM from 'react-dom';
import GuineaPigs from '../components/GuineaPigs';
var GUINEAPATHS = [
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-1.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-2.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-3.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-4.jpg'
];
class GuineaPigsContainer extends React.Component {
constructor() {
super(...arguments); //⚠️Do not forget this line
this.state = { currentGP: 0 };
this.interval = null;
}
nextGP() {
var current = this.state.currentGP;
var next = ++current % GUINEAPATHS.length;
this.setState({ currentGP: next });
}
componentDidMount() {
this.interval = setInterval(this.nextGP, 5000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
var src = GUINEAPATHS[this.state.currentGP];
return <GuineaPigs src={src} />;
}
}
import React from 'react';
import ReactDOM from 'react-dom';
import GuineaPigs from '../components/GuineaPigs';
var GUINEAPATHS = [
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-1.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-2.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-3.jpg',
'https://s3.amazonaws.com/codecademy-content/courses/React/react_photo-guineapig-4.jpg'
];
class GuineaPigsContainer extends React.Component {
// no need constructor
state = { currentGP: 0 };
interval = null;
// non-static methods
nextGP() {
var current = this.state.currentGP;
var next = ++current % GUINEAPATHS.length;
this.setState({ currentGP: next });
}
componentDidMount() {
this.interval = setInterval(this.nextGP, 5000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
var src = GUINEAPATHS[this.state.currentGP];
return <GuineaPigs src={src} />;
}
}