#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
изменения от anobject
до astring
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; }