const initialStateUser = {
user: {}
};
function userReducer(state=initialStateUser, action) {
return state;
}
const rootReducer = combineReducers({
user: userReducer,
...
});
const mapStateToProps = store => {
return {
user: store.user
};
};
this.props.user.user.name
const mapStateToProps = store => {
return {
user: store.user.user
};
};
const initialStateUser = {
name: "Вася"
};
const mapStateToProps = store => { return { user: store.user.user }; };
const initialStateUser = { name: "Вася" };
const initialStateUser = {
users: []
}
function userReducer(state = initialState, action) {
const users = [...state.users];
if (action.type === "DEC_AGE") {
users[0].age += 1;
return {
...state,
users
};
}
return state;
}
const mapStateToProps = store => {
return {
users: store.users.users
};
};
const users = this.props.users.map((item, index) => {
return (
<div key={index}>
{item.name} - {item.age}
</div>
);
});
return {...state, users: state.users}
return {...state, users}
return {...state, users}
это говорит - создай мне объект, скопируй туда все из state и добавь новое поле users и замени старое, если было. Это равносильно:return {...state, users: users}
return Object.assign({}, state, {users: users});
{...state, users}
{users:[], [.......]}
{users}
равносильно {users: users}
, это короткая запись.[...users]
это копирование элементов массива в другой массив.const users = [...state.users];
не делает копии стейта, следовательно, дальше так же меняется сам стейт, так что суть, видимо не в том, стейт или копию нужно изменять, а в том, как конструировать возвращаемый объект. const users = [...state.users];
в массиве users ссылки на объекты массива state.users, а не копия этого массива.Because we want to update a specific item in the array without resorting to mutations, we have to create a new array with the same items except the item at the index. If you find yourself often writing such operations, it's a good idea to use a helper like immutability-helper, updeep, or even a library like Immutable that has native support for deep updates
const copyObj = [...state.obj]
не канает. Если у тебя есть список чего-то, то у тебя есть два пути, ты можешь оставить данные как есть в памяти, либо скопировать их в новую область. Но чтоб твое изменение увидели, ты должен вернуть новое состояние, это то, что ты возвращаешь из редюсера при изменениях, а не данные, которыми ты манипулируешь