Есть код одного Redux-React приложения который может помочь мне написать мой новый собственный проект, но я там встретился с такой записью:
const mapStateToProps = state => state;
Я раньше не писал таким образом, кроме того попросили переделать и сделать как-то так(пример с совсем другого кода):
const mapStateToProps = state => ({
onLike: state.propReducer.like
});
И я переделал mapStateToProps и то что по моему мнению нужно было переделать в методе render(я новичок в Redux), но у меня появились ошибки и приложение перестало работать:
./src/containers/app.js
Line 47:29: 'stateToPropsSearchInput' is not defined no-undef
Line 52:12: 'stateToPropsStartDataArray' is not defined no-undef
Line 52:54: 'stateToPropsStartDataArray' is not defined no-undef
Line 53:169: 'stateToPropsCategory' is not defined no-undef
Line 65:95: 'stateToPropsDay' is not defined no-undef
Line 71:10: 'stateToPropsStartDataArray' is not defined no-undef
Line 71:66: 'stateToPropsFilteredDataArray' is not defined no-undef
Я напишу в спойлере рабочий вариант части файла App.js до изменений и не рабочий после изменений. Пусть вас не пугает большой код, больше кода написал для информативности, по сути я изменил только тело метода mapStateToProps, и в методе render во всех местах изменил названия свойств стейта (из редюсера) на свойства которые придумал в методе mapStateToProps, тоесть stateToPropsSearchInput и т.д. . Помогите пожалуйста исправить mapStateToProps и подскажите что исправить в теле метода render.
Рабочий вариант до измениний
class Root extends React.Component {
componentDidMount() {
this.props.onFetchData(daysArray[this.props.propsReducer.day]);
}
render() {
const { onFilter, onSetSearch, onFetchData } = this.props;
const { day, startDataArray, filteredDataArray, searchInput, category} = this.props.propsReducer;
return (
<div>
<TableSearch value={searchInput} onChange={e => onSetSearch(e.target.value)}
onSearch={value => onFilter({ searchInput: value })}/>
{startDataArray && Object.keys(startDataArray).map(element => (
<button data-category={element} onClick={e => onFilter({ category: e.target.dataset.category })} className={element === category ? "active" : "noActive"}>
{element}
</button>
))}
{daysArray && daysArray.map((element, index) => (
<button key={element} onClick={() => onFetchData(element)} className={element === day ? "activeDay" : "noActiveDay"}>
{element}
</button>
))}
{startDataArray && <TableData dataAttribute={filteredDataArray} />}
</div>
);
}
}
const mapStateToProps = state => state;
const matchDispatchToProps = dispatch => ({
onFilter: args => dispatch(filter(args)),
onSetSearch: search => dispatch(setSearch(search)),
onFetchData: day => dispatch(fetchData(day))
});
Не рабочий вариант после изменений
class Root extends React.Component {
componentDidMount() {
this.props.onFetchData(daysArray[this.props.propsReducer.stateToPropsDay]);
}
render() {
const { onFilter, onSetSearch, onFetchData } = this.props;
const { day, startDataArray, filteredDataArray, searchInput, category} = this.props.propsReducer;
return (
<div>
<TableSearch value={stateToPropsSearchInput} onChange={e => onSetSearch(e.target.value)}
onSearch={value => onFilter({ stateToPropsSearchInput: value })}/>
{stateToPropsStartDataArray && Object.keys(stateToPropsStartDataArray).map(element => (
<button data-stateToPropsCategory={element} onClick={e => onFilter({ stateToPropsCategory: e.target.dataset.stateToPropsCategory })} className={element === stateToPropsCategory ? "active" : "noActive"}>
{element}
</button>
))}
{daysArray && daysArray.map((element, index) => (
<button key={element} onClick={() => onFetchData(element)} className={element === stateToPropsDay ? "activeDay" : "noActiveDay"}>
{element}
</button>
))}
{stateToPropsStartDataArray && <TableData dataAttribute={stateToPropsFilteredDataArray} />}
</div>
);
}
}
const mapStateToProps = state => ({
stateToPropsDay: state.propReducer.day,
stateToPropsStartDataArray: state.propReducer.startDataArray,
stateToPropsFilteredDataArray: state.propReducer.filteredDataArray,
stateToPropsSearchInput: state.propReducer.searchInput,
stateToPropsCategory: state.propReducer.category
});
const matchDispatchToProps = dispatch => ({
onFilter: args => dispatch(filter(args)),
onSetSearch: search => dispatch(setSearch(search)),
onFetchData: day => dispatch(fetchData(day))
});
в reducer я стейт передал такой:
state = {
day: 1,
startDataArray: [],
filteredDataArray: [],
searchInput: "",
category: "departure"
}
а файл combineReducers выглядит так:
const rootReducer = combineReducers({
propsReducer: reducer
});