Как я могу передать функцию в маршрут с формой, которая запускается после отправки и устанавливает состояние в предыдущем маршруте? - PullRequest
0 голосов
/ 16 октября 2018

Контекст

У меня есть небольшое приложение, в котором вы в основном можете отправлять идеи.Он существует из Home компонента, который представляет идеи в состоянии.

И еще один компонент, к которому пользователь имеет доступ через маршрут React-Router, где он видит небольшую форму и может представить новую "идею".

Вопрос

Я несколько раз сталкивался с этой проблемой, и теперь я хочу ее решить.Как я могу отправить эту форму, вернуться к домашнему компоненту, этот компонент извлекает из формы «заголовок» и «тело», создает новую идею и устанавливает состояние (повторное отображение) с новой идеей?

Дополнительная информация

В указанном домашнем компоненте я уже добавил эту функцию:

addNewIdea = (title, body) => {
    const newIdea = { id: 2, title, body, claimed: false, likes: 0 }
    this.setState({
        ...this.state.ideas,
        newIdea
    })
}

Что я могу с ней сделать?Я не могу напрямую передать его в "/ new / route right?

Так что же на самом деле должно произойти, когда пользователь нажимает" submit "в форме на" / new "маршруте? Он должен перенаправить обратно домой(с введенной информацией), и Домашний Компонент должен получить это и повторно выполнить с новой Идеей.

Нужно ли мне Redux для этого или это работает с пустым React?

NewIdea Компонент выглядит так:

return (
        <div className="new-idea-container">
            <div className="new-idea-box">
                <h2 className="new-idea-title">Create a new IDEA</h2>
                <input className="new-idea-input-title" type="text" placeholder="Title" value={this.state.title} onChange={(e) => this.setState({ title: e.target.value })} />
                <div contentEditable className="new-idea-textarea" placeholder="Write a detailled Description of your IDEA" onChange={(e) => this.setState({ body: e.target.value })}>{this.state.body}</div>
                <div className="new-idea-btn-wrapper">
                    <input className="new-idea-submit-btn" type="submit" value="Submit" onClick={this.handleSubmitBtn} />
                    <Link className="new-idea-cancel-btn" to="/">
                        <input className="new-idea-cancel-btn" type="submit" value="Cancel" />
                    </Link>
                </div>
            </div>
        </div>
    )

Просто ссылка, которая возвращает пользователя, когда он нажимает кнопку отправки.

Вот мои маршруты:

render() {
return (
  <Router>
    <div>
      <Route exact path="/" component={Home} />
      <Route exact path="/new" component={NewIdea} />
    </div>
  </Router>
);
}

Еще один пример того, чего я хочу достичь:

Представьте, что у меня есть компонент Home, который имеет в качестве состояния массив идей (объектов). Теперь без React Router я бы сделал это такthis.

Создайте новый Компонент AddIdea - для этого передается функция обратного вызова в качестве реквизита (из вышеприведенного addNewIdea). Дочерний компонент AddIdea теперь получает заголовок и тело от пользователя ипосле нажатия кнопки отправки я запускаю функциюреквизит, который будет обновлять состояние в родительском компоненте.

Но я не могу сделать это в реагирующем маршрутизаторе.По крайней мере, я не знаю об этом, поэтому я спрашиваю, может быть, есть и другой способ обойти этоТам должно быть, верно?

Вот весь проект: https://github.com/dhuber666/Ideas

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...