typeError: не может прочитать свойство 'users' из null в React - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь создать страницу изменения пароля в реакции и получаю typeError: не могу прочитать свойство 'users' из null. Код работает для других страниц формы (где я делаю PUT и CREATE), но не этот

Я пытался привязать обработчик отправки к ключевому слову this, но это не сработало. Также попытался связать handlePasswordChange с этим ключевым словом

./formchange

import React from "react";
import { Link } from "react-router-dom";
var createReactClass = require("create-react-class");
var FormChange = createReactClass({
  //setting initial state
  getInitialState() {
    return {
      password: {}
    };
  },
  handlePasswordChange(e) {
    this.setState({
      password: e.target.value
    });
  },
  handleSubmit(e) {
    e.preventDefault();
    this.props.onSubmit(this.state);
    this.props.history.push("/");
  },
  render() {
    return (
      <form
        name="categories_post"
        className="form-horizontal"
        onSubmit={this.handleSubmit}
      >
        <div id="change_password">
          <div className="form-group">
            <label
              className="col-sm-2 control-label required"
              htmlFor="password"
            >
              Password
            </label>
            <div className="col-sm-10">
              <input
                type="text"
                value={this.state.password}
                onChange={this.handlePasswordChange}
                id="password"
                className="form-control"
              />
            </div>
          </div>
          <button
            type="submit"
            id="formChangeSubmit"
            className="btn btn-default"
          >
            Submit
          </button>
        </div>
      </form>
    );
  }
});
export default FormChange;

./passwordupdate

import React from "react";
import { updateUsers, fetchUsers } from "./actions/appactions";
import FormChange from "./formchange";
var createReactClass = require("create-react-class");
const Update = createReactClass({
  getIntitialState() {
    return {
      users: {}
    };
  },
  componentWillReceiveProps(props) {
    this.setState(props);
  },
  componentDidMount() {
    fetchUsers(this.props.match.params.usersId)
      .then(data => {
        this.setState(state => {
          state.users = data;
          return state;
        });
      })
      .catch(err => {
        console.error("error", err);
      });
  },
  handleSubmit(data) {
    updateUsers(this.state.users.id, data);
  },
  render() {
    return (
      <div>
        <FormChange
          onSubmit={this.handleSubmit.bind}
          password={this.state.users.password}
        />
      </div>
    );
  }
});
export default Update;

//fetchusers function
export function fetchUsers(id) {
  return fetch("https://localhost:44341/api/users/" + id, {
    method: "GET",
    mode: "cors"
  })
    .then(res => res.json())
    .catch(err => err);
}

Ответы [ 3 ]

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

Я не уверен, но у вас есть данные в handleSubmit в качестве параметра, но вы не передаете их.

попробуйте это

Вы можете вызвать функцию следующим образом:

handleSubmit=(data)=> {
updateUsers(this.state.users.id, data);

},

и назовите его

onSubmit={(data)=> this.handleSubmit(data)}
0 голосов
/ 21 мая 2019

Проблема была в ComponentDidMount().Состояние всегда было нулевым, пришлось изменить его на

 componentDidMount() {
    fetchTheUsers(this.props.match.params.usersId)
      .then(data => {
        this.setState({
          users: data
        });
      })

. Сначала я делал это так, потому что так работало для других моих файлов обновлений.Надеюсь, что это полезно для кого-то еще.

0 голосов
/ 10 мая 2019
    <FormChange
      onSubmit={this.handleSubmit.bind(this)}
      password={this.state.users.password}
    />

внесите это изменение и отметьте

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