React-Redux: редуктор только возвращает исходное состояние - PullRequest
0 голосов
/ 07 января 2020

Когда я использую в своем приложении «Реак» избыточность, редуктор просто возвращает мне исходное состояние. Здесь всегда возвращается ложное значение. Спасибо за ваш ответ.

[ОБНОВЛЕНИЕ]: я произнес: *

к этому:

 let newState = {...state}

но также редуктор вернул false

это мой редуктор:

 const initialState = {
      modalVisible: false
    };
    function modalReducer(state = initialState, action) {
      let newState = {...state};
      switch (action.type) {
        case "SHOW":
          newState.modalVisible = true;
          console.log("Show!");
          break;
        case "HIDE":
          newState.modalVisible = false;
          console.log("Hide!");
          break;
      }
      return newState;
    }

export default modalReducer;

и это мой компонент (компонент Svg Viewer)

import React from "react";

import { connect } from "react-redux";

const SvgViewer = ({
  nodesData,
  svgFilePath,
  modalVisible,
  onModalShow,
  onModalHide
}) => {

  const clickHandler = () => {
    onModalShow();
    console.log(modalVisible); //return false
    onModalHide();
    console.log(modalVisible);
  };

  return (
    <div className="unit-schema-container1" key={svgFilePath}>
      <object id="svgobject" type="image/svg+xml" data={svgFilePath}></object>
      <button onClick={clickHandler}></button>
    </div>
  );
};

const mapStateToProps = state => {
  return { modalVisible: state.modalVisible };
};

const mapDispatchToProps = dispatch => {
  return {
    onModalShow: () => {
      dispatch({ type: "SHOW" });
    },
    onModalHide: () => {
      dispatch({ type: "HIDE" });
    }
  };
};
export default connect(mapStateToProps, mapDispatchToProps)(SvgViewer);

Ответы [ 3 ]

1 голос
/ 07 января 2020

Вы должны попробовать использовать это. Его легче читать и использует лучшие практики

const initialState = {
  modalVisible: false
};

function modalReducer(state = initialState, action) {
  switch (action.type) {
    case "SHOW":
      return {...state, modalVisible: true }
    case "HIDE":
      return {...state, modalVisible: false }
    default:
      return state
  }
}
0 голосов
/ 07 января 2020

Я думаю, что проблема в функции mapStateToprops, пожалуйста, опубликуйте ваш основной редуктор, попробуйте отредактировать вашу mapStateToProps

const mapStateToProps = state => {
  return { modalVisible: state.modalVisible.modalVisible  };
};
0 голосов
/ 07 января 2020

вы должны вернуть новый объект состояния

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