Как в react class component ипользовать React.useState?

Добрый день
Есть код
class MyClass extends React.Component {
    constructor(props) {
        super(props);        
    }
    render() {
        const [current, setCurrent] = React.useState('one')
        return (
            <section className="section">
                <Tab value="one" active={current === 'one'} onClick={setCurrent}>One</Tab>
                <Tab value="two" active={current === 'two'} onClick={setCurrent}>Two</Tab>
            </section>
        )
    }
}

Соотв. получаю ошибку, что необходимо использовать function component.
Подскажите, как использовать React.useState в class component? Это возможно?
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
shock_rd
@shock_rd
Reactивный фронтендер и 3 литра в пятницу
Возможно, но в данном случае классовые компоненты не делают жизнь проще

class MyClass extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
          current: 'one'
        };
    }
    render() {
        return (
            <section className="section">
                <Tab value="one" active={this.state.current === 'one'} onClick={() => this.setState({current: 'one'})}>One</Tab>
                <Tab value="two" active={this.state.current === 'two'} onClick={() => this.setState({current: 'two'})}>Two</Tab>
            </section>
        )
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
useState - это хук, а хуки используются только в функциональных компонентах.

import React from 'react';

function MyClass() {
    const [current, setCurrent] = React.useState('one');

    return (
        <section className="section">
            <Tab value="one" active={current === 'one'} onClick={setCurrent}>One</Tab>
            <Tab value="two" active={current === 'two'} onClick={setCurrent}>Two</Tab>
        </section>
    )
}


Полагаю, что в вашем примере setCurrent самостоятельно подхватывает параметр из value соответствующего компонента <Tab>.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы