Взаимодействие компонентов в React

406
23 июня 2017, 10:31

Есть форма (в ней input и button), есть div(компонент Posts) внизу нее, где должны отображаться элементы, которые будут добавляться при нажатии на кнопку.

Суть: написать текст, нажать кнопку - текст добавится в компонент posts.

export class Form extends Component {
    constructor(props){
        super(props);
        this.handleClick = this.handleClick.bind(this);
        this.handleChange = this.handleChange.bind(this);
        this.state = { text: "" };
    }
    handleChange(e) {
        this.setState({ text: e.target.value });
    }
    handleClick() {
        // при клике на кнопку нужно создать новый компонент post
        // отрендерить (а значит изменить state)
        // и добавить его в posts
    }
    render() {
        return (
        <div className="form">
            <input type="text" onChange={this.handleChange} />
            <button onClick={this.handleClick} >Add</button>
            </div>
        );
    }
}
export class Posts extends Component {
    render() {
        return(
        <div className="posts"></div>
        );
    }
}
export class Post extends Component {
    render() {
        return(
        <div className="post">{this.props.text}</div>
        );
    }
}
export class App extends Component {
    constructor(props) {
        super(props);
        this.state = { posts: [] };
    }
    render() {
        return(
        <div>
            <Form />
            <Posts />
        </div>
        );
    }
}

Как сделать взаимодействие компонентов? Чтобы при клике на кнопку добавлялся новый элемент-компонент post. Как понимаю это должно работать - при клике на кнопку я обновляю state в компоненте Form и изменяю state в App. Но подход, наверное, неверен, потому что полностью все компоненты будут заново рендериться. Значит, надо обновить лишь state в Form. Но как создать post-элемент и добавить в posts не знаю. Подскажите, пожалуйста.

READ ALSO
ProgressBar на чистом JavaScript

ProgressBar на чистом JavaScript

Задача: При загрузке страницы плавное увеличение прогрессбара до нужного значения + вывод этого значения в процентахСмог сделать для одного...

317
В чем ошибка (перевод в римское счисление)?

В чем ошибка (перевод в римское счисление)?

Как считаете, почему я получаю значение "undefined", а не римское число? Может, грубая ошибка?

250
Сесии и авторизация node js

Сесии и авторизация node js

Есть ли возможность сделать авторизацию и сессии на чистом node js без использования express?

486