Nested Route React работает с переменной локальной области видимости? - PullRequest
0 голосов
/ 15 марта 2019

Да, так что я не уверен, почему это работает, но как-то так? Я очень новичок, чтобы реагировать и просто хотел бы понять, что я делаю неправильно или как исправить. Вот мой фрагмент кода реакции:

    this.state = { user_ledgers: [], paginator: { count: 0, page: 0, limit: 0 }, user: { id: this.props.match.params.user_id } };
    this.handleCreate = this.handleCreate.bind(this);
    this.handleUpdate = this.handleUpdate.bind(this);
    this.handleChangePage = this.handleChangePage.bind(this);
  }

  componentDidMount() {
    var user_id = this.state.user.id;
    this.fetchData(user_id, 1);
  }

  fetchData = (user_id, page_number) => {
    apiService.ledgersIndex(user_id, page_number)
      .then(
        paginated => {
          this.setState({
            user_ledgers: paginated.user_ledgers,
            ...........

var user_id в componentDidMount - это локальная переменная в этом коде, если мое понимание реакции правильно? Тем не менее, я попал в правильную конечную точку и каким-то образом получаю правильные данные. Как именно это работает? Вот мой совет:

function ledgersIndex(user_id, page_number) {
  const requestOptions = {
    method: 'GET',
    headers: Object.assign({},
      authorizationHeader(), 
      { 'Content_type': 'application/json' })
  };

  return fetch(`${process.env.API_SERVER}/api/v1/admin/users/${user_id}/transactions?page=${page_number}`, requestOptions)
    .then(handleResponse)
    .then(paginated => {
      return paginated;
    });
}

Это приложение для реакции на рельсы, маршрут рельсов вложен

namespace :admin do
        resources :users do
          resources :user_ledgers, path: :ledgers, only: [:index, :create, :show, :update]

Смысл этого вопроса в том, чтобы просто понять, как я подбираю правильную конечную точку с помощью локальной переменной var? Чтобы сделать его не локально ограниченным, как мне сделать его доступным через мой компонент и apiService? Я знаю, что это работает, но я хотел бы сделать это правильно, и понимаю, почему это работает.

1 Ответ

0 голосов
/ 16 марта 2019

Вы правы, что user_id локально ограничен.Но затем вы передаете его this.fetchData:

this.fetchData(user_id, 1);

Это вызывает ваш метод fetchData, и при инициализации вашего метода fetchData, это как если бы была эта строкапроисходит:

var user_id = {user_id из вызова this.fetchData}

То же самое происходит при вызове apiService.ledgersIndex

Дальнейшее чтение: https://scotch.io/tutorials/understanding-scope-in-javascript

...