Согласно блогу ниже, при вызове статического метода внутри класса функция-вызывающий должна быть методом класса, поэтому добавление @classmethod
в определение вашего метода может решить проблему.
Окончательное руководство по использованию статических, классных или абстрактных методов в Python
ES6 React.Component не автоматически связывает методы с самим собой. Вы должны связать их самостоятельно в конструкторе. Например:
constructor (props){
super(props);
this.state = {
loopActive: false,
shuffleActive: false,
};
this.onToggleLoop = this.onToggleLoop.bind(this);
}
Если вы вызываете свой созданный метод в методах жизненного цикла, таких как componentDidMount ... тогда вы можете использовать только функцию this.onToggleLoop = this.onToogleLoop.bind(this)
и функцию стрелки жира onToggleLoop = (event) => {...}
.
Обычный подход к объявлению функция в конструкторе не работает, потому что методы жизненного цикла называются ранее.
Я столкнулся с аналогичным связыванием в функции рендеринга и в конечном итоге передал контекст this
следующим образом:
{someList.map(function(listItem) {
// your code
}, this)}
Я также использовал:
{someList.map((listItem, index) =>
<div onClick={this.someFunction.bind(this, listItem)} />
)}
Есть несколько способов.
Одним из них является добавление this.onToggleLoop = this.onToggleLoop.bind(this);
в конструктор.
Другим является функция стрелок onToggleLoop = (event) => {...}
.
И тогда есть onClick={this.onToggleLoop.bind(this)}
.
onClick
возвращает новую функцию для каждого рендеринга и, следовательно, выглядит так, как новое значение передавалось для prop, возиться с shouldComponentUpdate
в PureComponent
s.
– Ninjakannon
25 May 2018 в 11:34
Напишите свою функцию следующим образом:
onToggleLoop = (event) => {
this.setState({loopActive: !this.state.loopActive})
this.props.onToggleLoop()
}
http://www.react.express/fat_arrow_functions
привязка для ключевое слово это одно и то же снаружи и внутри функции толстой стрелки. Это отличается от функций, объявленных функцией, которые могут связывать это с другим объектом при вызове. Поддержание этой привязки очень удобно для операций, таких как mapping: this.items.map (x => this.doSomethingWith (x)).
blockquote>
() => this.onToggleLoop
после перемещения функции onToggleLoop в ваш класс реагирования, он также будет работать. – Sam 26 August 2016 в 18:50this
не определено в первую очередь? Я знаю, чтоthis
в Javascript зависит от того, как называется функция, но что здесь происходит? – maverick 3 January 2018 в 17:26