Почему мой аргумент состояния при создании моего Redux-редуктора не обновляется?

#javascript #reactjs #redux #react-redux #switch-statement

Вопрос:

Помогите, я впервые связываю Redux с реакцией.

Мой аргумент состояния был передан со значением, но когда в switch инструкции значения, присвоенные параметру state , считываются не return как исходное значение hello , а как значения из инструкции return, после этого No значение становится начальным ADD .

когда страница загружается, она показывает, что состояние имеет значение «Привет», но когда я отправляю действие, значение состояния меняется на «Нет».

Это мой код

 const MessageReducer = (state = "hello", action) => {
alert(state);
  switch (action.type) {
    case "ADD":
      // state.;
      alert(state);
      return "ADD";
    default:
      return "No";
  }
};
export default MessageReducer;
 

это мой магазин настроек:

 import MessageReducer from "../reducers/messageReducer";

export const store = configureStore({
  reducer: { preview: MessageReducer },
});

 

мой makdown.js:

 import React from "react";
import { connect } from "react-redux";
import MsgCreator from "../actions/msgAction";

class Markdown extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      current: "",
    };
    this.handleChange = this.handleChange.bind(this);
  }
  handleChange(event) {
    this.setState({
      current: event.target.value,
    });
    this.props.input(this.state.current);
  }
  render() {
    let i = this.props.messages;
    return (
      <div>
        <form>
          <label for="editor">Enter your text here: </label>
          <textarea
            id="editor"
            name="editor"
            value={this.props.current}
            onChange={this.handleChange}
          ></textarea>
        </form>
        <p id="preview">{i}</p>
      </div>
    );
  }
}

const mapStateToProps = (state) => {
  return {
    messages: state.preview,
  };
};

const mapDispatchToProps = (dispatch) => {
  return {
    input: (input) => {
      dispatch(MsgCreator(input));
    },
  };
};

export default connect(mapStateToProps, mapDispatchToProps)(Markdown);
 

Мой App.js:

 import React from "react";
import Markdown from "./components/markdown";
import "./App.css";

function App(props) {
  return (
    <div className="App">
      <h1>hello world</h1>
      <Markdown />
    </div>
  );
}

export default App;

 

Комментарии:

1. Работает ли оповещение?

2. @CoraSphinx да, предупреждение работает, когда страница загружается, оно показывает, что состояние имеет значение «Привет», но когда я отправляю действие, значение состояния меняется на «Нет».

Ответ №1:

Я нигде не видел yow Provider={магазин}

 <Provider store={store}>
<App/>
</Provider>
 

Комментарии:

1. Еще одна вещь, которая может вызвать эту проблему, заключается в том, что перед вызовом действия yow вы устанавливаете локальное состояние с новым значением… когда обновление состояния генерирует визуализацию, поэтому вы принимаете локальное состояние, оно запускает повторную визуализацию, затем вы выполняете свое действие с помощью свойства локального состояния, которое может не иметь нового значения к моменту выполнения действия, так как функция обновления состояния выполняется асинхронно. Эфир удалите локальное состояние или установите один и тот же параметр для обеих функций

2. Я удалил локальное состояние, в котором использовал только собственное. Из моей борьбы за отладку он показывает state изменения в новом значении (строке), находясь в switch case .

3. Я обновил код до чего-то подобного сейчас, но показывает typeof изменения от an object до a string

4. const MessageReducer = (state = { data: "" }, action) => { switch (action.type) { case "ADD": alert(typeof state); state.data = action.input; return state.data; default: return state.data; }