2016-11-10 2 views
1

Я получаю непредвиденную ошибку маркера при каждом добавлении функции до render().React-Rails Неожиданная ошибка Token для любой функции, кроме render()

Например:

var App = React.createClass({ 

    constructor() { 
    super(); 

    this.state = { 
     notebooks: {} 
    }; 
    } 

    render: function() { 
    return (
     <div style={{"height": "100%"}}> 
     <NotebookNav notebooks={this.props.notebooks}></NotebookNav> 
     <Technique></Technique>  
     </div> 
    ); 
    } 
}); 

Этот компонент отлично компилируется, когда я удаляю функцию constructor(), но с constructor(), он бросает неожиданный маркер ошибки, указывающий на render: function(). У кого-нибудь есть идеи о том, как это исправить?

+0

Вам нужно либо использовать синтаксис класса ES6, либо добавить запятую (',') после кода 'constructor() {...}'. –

ответ

1

Здесь вы вводите в заблуждение синтаксис. createClass принимает объект как аргумент, а не класс ES6. Объектам нужны запятые, разделяющие элементы. Кроме того, простые объекты не имеют конструктора, подобного классу. В РЕАКТ объекта спецификации createClass вы, вероятно, хотите getInitialState вместо

React.createClass({ 
    getInitialState() { 
    return { notebooks: {} } 
    }, // <--- comma 
    render() {...} 
}) 

вы могли бы, однако переписать всю вещь, используя класс ES6 (который не имеет запятых отделяя методы.

class App extends React.Component { 
    constructor() { 
    super(); 

    this.state = { 
     notebooks: {} 
    }; 
    } // <--- no comma 

    render() { 
    return (
     <div style={{"height": "100%"}}> 
     <NotebookNav notebooks={this.props.notebooks}></NotebookNav> 
     <Technique></Technique>  
     </div> 
    ); 
    } 
} 
+0

Спасибо, это очень ясно. Мой предыдущий опыт React был с React Native, где я использовал ES6, а генератор компонентов React-Rails создает синтаксис createClass. Я не осознавал последствий этого изменения. –

0

Да, это потому, что вы не разделяя функции с запятой. Вы должны написать это

var App = React.createClass({ 

getInitialState: function() { 
    return { 
    notebooks: {} 
    }; 
}, 

render: function() { 
    return (
    <div style={{"height": "100%"}}> 
     <NotebookNav notebooks={this.props.notebooks}></NotebookNav> 
     <Technique></Technique>  
    </div> 
); 
} 
}); 

также должны быть this.state.notebooks не this.props.notebook

+0

да, это правда, отредактирует мой ответ –

Смежные вопросы