флажок реагировать на передачу строкового значения для обновления запроса - PullRequest
0 голосов
/ 06 января 2020

Это мой код:

import React, { Component } from "react";
import { bindActionCreators } from "redux";
import { connect } from "react-redux";
import { withRouter } from "react-router-dom";

import {
  setLastOrderDays,
  updateLastOrderAlert
} from "reducers/DealerPreferencesReducer";

class Alerts extends Component {
  state = {
    prevId: null,
    checked:  ""
  };

  static getDerivedStateFromProps(props, state) {
    // Store prevId in state so we can compare when props change.
    // Clear out previously-loaded data (so we don't render stale stuff).
    if (props.dealerID !== state.prevId) {
      //update action goes here...
      //props.actions.getUsers(props.dealerID);
      return {
        prevId: props.dealerID
      };
    }

    // No state update necessary
    return null;
  }

  componentDidMount = () => {
    this.setState({ days: this.props.preferences.last_order_alert });
    //this.setState({ checked: this.props.preferences.last_order_alert_enabled})
  };

  toggleAlerts = e => {
    //console.log('lastOrder', this.props.preferences.last_order_alert_enabled);
    this.props.actions.updateLastOrderAlert(
      this.props.preferences.id,
      this.props.dealerID,
      this.props.isGroup,
      this.props.preferences.last_order_alert,
      this.props.preferences.last_order_alert_enabled === this.handleCheck
    );
  };

  handleCheck = event => {
    console.log('called', this.setState);
    this.setState({checked: event.target.checked})
  };

  handleAlertDays = e => {
    e.persist();
    if (String(e.target.value) !== this.props.preferences.last_order_alert) {
      this.props.actions.updateLastOrderAlert(
        this.props.preferences.id,
        this.props.dealerID,
        this.props.isGroup,
        String(e.target.value),
        this.props.preferences.last_order_alert_enabled
      );
    }
  };

  render = () => {
    console.log('checked', this.state.checked);
    const { preferences } = this.props;
    return (
      <div className="preferenceContainer">
        <div className="preferenceRow lg">
          <div className="preferenceLabelWrapper">
            <div className="preferenceLabel">Enable Alert</div>
            <div className="preferenceSubLabel">
              Toggles the Last Order Alert Email
            </div>
          </div>
          <div className="preferenceInput">
            <input
              type="checkbox"
              checked={this.state.checked}
              onChange={this.handleCheck}
            />
          </div>
        </div>
        <div className="preferenceRow">
          <div className="preferenceLabelWrapper">
            <div className="preferenceLabel">Days Since Last Order</div>
          </div>
          <div className="preferenceInput">
            <input
              type="number"
              value={preferences.last_order_alert}
              onBlur={this.handleAlertDays}
              onChange={e =>
                this.props.actions.setLastOrderDays(e.target.value)
              }
              style={{ width: "50px" }}
            />
          </div>
        </div>
        <div className="preferenceRow">
          <button
              className={'btn btn-primary'}
              type="submit"
              onClick={this.toggleAlerts}
          >Save
          </button>
        </div>
      </div>
    );
  };
}

const mapStateToProps = state => ({
  dealerID: state.DealerTreeReducer.selectedShop.id,
  isGroup: state.DealerTreeReducer.selectedShop.folder,
  preferences: state.DealerPreferencesReducer,
  loading: state.DealerTreeReducer.loading
});

const mapDispatchToProps = dispatch => ({
  actions: bindActionCreators(
    { updateLastOrderAlert, setLastOrderDays },
    dispatch
  )
});

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(withRouter(Alerts));

Я пытаюсь сделать так, чтобы каждый раз, когда я нажимал на флажок, я хотел получить либо единицу, либо ноль, который, в свою очередь, я буду использовать для передачи toggleAlerts, чтобы обновить настройки моего пользователя в моем приложении. Флажок прямо сейчас только проверяет и снимает галочки. Единственный раз, когда он меняется, это когда я нажимаю на сохраненную кнопку В конечном итоге я хочу сохранить изменения, когда нажму кнопку «Сохранить». Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 06 января 2020

изменяя вашу handleCheck функцию и setState это значение и обращаясь к этой переменной состояния, одновременно вызывая toggleAlerts что-то вроде этого.

handleCheck = event => {
  console.log('called', this.setState);
  this.setState({checked: Number(event.target.checked) }) //change here
};

toggleAlerts = e => {
  this.props.actions.updateLastOrderAlert(
    this.props.preferences.id,
    this.props.dealerID,
    this.props.isGroup,
    this.props.preferences.last_order_alert,
    this.props.preferences.last_order_alert_enabled === this.state.checked //change here
  );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...