Как пройти метод проп с реакцией маршрутизатора | оказывать - PullRequest
2 голосов
/ 04 мая 2019

Я искал различные потенциальные решения в StackOverflow / где-то еще, и до сих пор мне не удалось найти решение, которое, по моему мнению, относится именно к моей проблеме.

Я видел несколько постов, в которых упоминался метод Router render, но я не могу обернуться, я бы передал метод из отдельного компонента в другой компонент, используя этот подход.

Например, я пытаюсь, чтобы метод в моем компоненте App был передан в мой компонент Form в качестве реквизита.Когда форма в Form отправлена, она должна вызвать переданный метод, обновляющий состояние в App с помощью входных данных из формы.

Метод в App называется accountDetails

class App extends React.Component {
  state = {
    username: this.props.location.state.username,
    color: this.props.location.state.color || "red",
    firstName: "",
    lastName: "",
    contact: ""
  };

  toJobBoard = () => {
    this.props.history.push({
      pathname: `jobs/${this.state.username}`,
      state: { username: this.state.username }
    });
  };

  //this is the method I would like to pass into the Form component via Router
  accountDetails = (firstName, lastName) => {
    this.setState({ firstName, lastName });
  };

// + irrelevant code

Как выглядит мой Маршрутизатор в настоящий момент, я знаю, что я вписал в render бессмысленно, я сейчас играю с ним.

const Router = () => (
  <BrowserRouter>
    <Switch>
      <Route exact path="/" component={Login} />
      <Route exact path="/page/:usernameId" component={App} />
      <Route
        exact
        path="/page/jobs/:usernameId"
        render={props => (
          <Form {...props} accountDetails={App.accountDetails} />
        )}
      />
    </Switch>
  </BrowserRouter>
);

TLDR;Я хочу передать метод в одном компоненте, в другой в качестве реквизита, используя Router.Когда компонент вызывается в другом компоненте, он должен обновить состояние в первом компоненте.

- редактировать мой Маршрутизатор является компонентом верхнего уровня.Приложение и Форма - оба пути.

Спасибо!

1 Ответ

0 голосов
/ 04 мая 2019

Ваш компонент маршрутизатора находится внутри компонента приложения? если да, просто передайте метод в качестве реквизита маршрутизатору, и все будет в порядке.

`const Router = (props) => (

  <BrowserRouter>

    <Switch>

      <Route exact path="/" component={Login} />

      <Route exact path="/page/:usernameId" component={App} />

      <Route exact path="/page/jobs/:usernameId" render={() => ( <Form accountDetails={props.accountDetails} />)}/>

    </Switch>

  </BrowserRouter>

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