Я создал поле ввода и отправляю действие в методе onChange поля ввода. У меня есть текст атрибута состояния: '', который должен обновляться, как только пользователь начинает вводить в поле ввода, но этого не происходит, вместо этого текстовый атрибут в состоянии исчезает, как только запускается действие, как проверено в Redux Dev tool.
Также есть ниже 2 запросов - читать документы, но все еще не ясно
Почему мы должны передавать initialState в createStore, поскольку я уже передал в состояние редукторам, хотя и прошел пустойinitialState to createStore.
Нужно ли использовать mapStateToProps в моем случае, поскольку я не использую какое-либо состояние в моем компоненте
Действиеfile - searchActions.js
import { SEARCH_MOVIE } from "./types";
export const searchMovie = text => ({
type: SEARCH_MOVIE,
payload: text
});
Файл редуктора - searchReducer.js
import { SEARCH_MOVIE } from "../actions/types";
const initialState = {
text: ""
};
const searchReducer = (state = initialState, action) => {
console.log(action);
switch (action.type) {
case SEARCH_MOVIE:
return {
...state,
text: action.payload
};
default:
return state;
}
};
export default searchReducer;
Файл корневого редуктора - index.js
import { combineReducers } from "redux";
import searchReducer from "./searchReducer";
const rootReducer = combineReducers({
searchReducer
});
export default rootReducer;
Хранить файл - хранить. js
import { createStore } from "redux";
import rootReducer from "./reducers";
const initialState = {};
const store = createStore(
rootReducer,
initialState,
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);
export default store;
Форма, содержащая поле ввода - SearchForm.js
import React, { Component } from "react";
import { searchMovie } from "../../actions/searchActions";
import { connect } from "react-redux";
export class SearchForm extends Component {
onChange = e => {
this.props.searchMovie(e.target.value);
};
render() {
return (
<div className="jumbotron jumbotron-fluid mt-5 text-center">
<form className="form-group">
<input
type="text"
className="form-control"
placeholder="Search Movies"
onChange={e => this.onChange(e)}
></input>
<button type="submit" className="btn btn-primary mt-3 btn-bg">
Search
</button>
</form>
</div>
);
}
}
const mapStateToProps = state => {
return {
text: state.text
};
};
const mapDispatchToProps = dispatch => ({
searchMovie: () => dispatch(searchMovie())
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(SearchForm);
Файл ввода - App.js
import React, { Component } from "react";
import { Provider } from "react-redux";
import SearchForm from "./SearchForm";
import store from "./store";
import "./App.css";
class App extends Component {
render() {
return (
<Provider store={store}>
<SearchForm />
</Provider>
);
}
}
export default App;