#reactjs #typescript #setstate
#reactjs #typescript #setstate
Вопрос:
Я впервые работаю в react typescript.
interface IState {
stateval: number;
}
class Forgotpassword extends React.Component<any, IState> {
constructor(props: any){
super(props);
this.state = { stateval: 1 };
}
public submit() {
this.setState({ stateval:2 });
}
public render() {
const { stateval} = this.state;
return (
<div className="App">
<Button onClick={this.submit}>Send OTP</Button>
</div>
);
}
}
Когда я нажимаю кнопку отправки, она выдает
Uncaught TypeError: this.setState is not a function
Комментарии:
1. добавьте
this.submit = this.submit.bind(this);
в свой конструктор.2.
<Button onClick={() => this.submit}>Send OTP</Button>
илиpublic submit = () => { this.setState({ stateval:2 }); }
3.
this
контекст кнопки — это кнопка. вам необходимо привязать функцию отправки к классу ForgotPassword4. Независимо от того, вызывает функция bind или использует функции со стрелками.
Ответ №1:
вам нужно привязать свой метод или преобразовать в функциональный, например
interface IState {
stateval: number;
}
class Forgotpassword extends React.Component<any, IState> {
constructor(props: any){
super(props);
this.state = { stateval: 1 };
}
const submit = () => {
this.setState({ stateval:2 });
}
const render = () => {
const { stateval} = this.state;
return (
<div className="App">
<Button onClick={this.submit}>Send OTP</Button>
</div>
);
}
}
я надеюсь, что это полезно
Комментарии:
1. есть ли способ распечатать объект, поскольку JSON.stringify() amp; console.log() не работают в typescript
2. попробуйте сначала напечатать простую строку, console.log(«Привет») если это сработает, console. войдите, все в порядке, это должно работать
3. сработало после добавления правила «no-console»: false в файл tslint.json, спасибо
Ответ №2:
Нет необходимости добавлять метод конструктора или использовать bind. Функция со стрелкой подходит для ваших нужд.
import React, { Component } from 'react';
interface IState {
stateval: number;
}
export default class Forgotpassword extends Component<any, IState> {
state = {
stateval: 2
}
public submit = () => this.setState({ stateval: 2 });
public render() {
return (
<div className="App">
<Button onClick={this.submit}>Send OTP</Button>
</div>
);
}
}
Ответ №3:
Пожалуйста, привяжите вашу функцию отправки к этому :
this.submit = this.submit.bind(это)