在下面提供我的代码。
export default class FirstTimeTab extends React.Component{
getInitialState(){
return {
'panes' : [
<div className="sports-tab-content">
<p className="sports-large-text ft-day1 ft-day2">
答案 0 :(得分:0)
this
在该方法中不可用..当您在第60行拨打this.changeContent
时,请将其更改为this.changeContent.bind(this)
。这会将组件实例绑定到方法。
如果您想通过添加以下内容,也可以在构造函数中执行此操作:
在this.changeContent = this.changeContent.bind(this)
下方的构造函数中super(props)
,然后您可以使用该方法
可以在此处详细了解bind
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
答案 1 :(得分:0)
您有多个小错误,一个接一个,需要修复。我强烈建议您进行较小的更改,以便更容易地跟踪开发过程中出现的问题。
首先,从export default
移除export default class FirstTimeTab extends React.Component
。在单文件小提琴中工作时,这不是必要的,就像我们在这里一样。
离开你了
class FirstTimeTab extends React.Component {
...
从那里运行会出现App
未定义的控制台错误:
ReactDOM.render(<App />, document.querySelector('.container'));
这是完全正确的,因为您已将App
更改为FirstTimeTab
。
将此更改为使用<FirstTimeTab />
后,您将收到另一个有用的控制台错误:
> getInitialState was defined on FirstTimeTab, a plain JavaScript class. This is
only supported for classes created using React.createClass. Did you mean to
define a state property instead?
此消息非常明确:您无法使用getInitialState
语法class
。相反,更改为在state
中设置初始constructor
属性的更清晰的方法:
constructor() {
super();
this.state = {
'panes' : [
<div className="sports-tab-content">
...
最后,在您正确显示内容之前,您仍然无法看到任何内容。您在每个content
的{{1}}属性中设置了内容,而其他代码似乎希望将其作为Pane
传递(这是React中更正确的方式) ):
children
编辑后续行动:
您已经使用这些代码指定了必需的道具:
render () {
return (
<Tabs selected={0} changeContent={this.changeContent}>
<Pane label="Account Setup" subtitle="Days 1 and 2" liClass="sports-setup-ico first-time-active ft-active-tab">
{this.state.panes[0]} // Content passed as children
</Pane>
...
以上说明,Pane.propTypes = {
label: React.PropTypes.string.isRequired,
children: React.PropTypes.element.isRequired
};
需要label
和children
。
如果您的错误 Pane
中未指定必需的道具content
,则表示代码中的某处需要Pane
作为属性。在上面的回答中,我建议您从content
中的内容传递到通过content
属性。如果您遵循该建议,只需删除导致此要求的行。它应该看起来像我上面添加的代码片段,尽管我在原始的小提琴中没有看到相同的证据。也许这是你后来添加的东西。