я использую редукцию и хочу показывать состояние загрузки своего приложения всякий раз, когда мое приложение получает данные из API и всякий раз, когда у меня есть нулевые данные в моих редукторах
я пробовал это, но у меня не загружается текст
if (this.props.isSignedIn === true) {
return <div
style = {{ textAlign: "right" }}>
<Link to='/streams/new' className='ui button primary'>
create new stream
</Link>
</div>
}
if (this.props.isSignedIn === false) {
return <div style = {{ fontSize: '30px' }}>Not a user? sign in now, it's free </div>
}
if (this.props.isSignedIn ===null) {
<div>loading...</div>
}
}
вот подключение и функция mapstatetoprops
const mapStateToProps = state => {
return {
streams: Object.values(state.streams),
userId: state.auth.userId,
isSignedIn: state.auth.isSignedIn
};
};
export default connect(
mapStateToProps,
{ fetchStreams }
)(StreamList);
а вот редуктор
import { SIGN_IN, SIGN_OUT } from '../actions/types';
const INTIAL_STATE = {
isSignedIn: null,
userId: null
};
export default (state = INTIAL_STATE, action) => {
switch (action.type) {
case SIGN_IN:
return { ...state, isSignedIn: true, userId: action.payload };
case SIGN_OUT:
return { ...state, isSignedIn: false, userId: null };
default:
return state;
}
};
вот действия
export const signIn = userId => {
return {
type: SIGN_IN,
payload: userId
};
};
export const signOut = () => {
return {
type: SIGN_OUT
};
};
да, сначала он нулевой и со временем меняется
также опубликуйте свои избыточные действия и редуктор, чтобы помочь вам лучше
я обновил свой вопрос, кстати, он отлично работает в истинных и ложных случаях
Обычно это делается путем установки свойства «загрузка» в хранилище и добавления дополнительного действия, такого как «SIGN_INIT».
Таким образом, ваш редуктор будет выглядеть так:
const INTIAL_STATE = {
isSignedIn: null,
loading: false,
userId: null
};
export default (state = INTIAL_STATE, action) => {
switch (action.type) {
case SIGN_INIT:
return { ...state, loading: true };
case SIGN_IN:
return { ...state, isSignedIn: true, loading: false, userId: action.payload };
case SIGN_OUT:
return { ...state, isSignedIn: false, loading: false, userId: null };
default:
return state;
}
};
Поэтому, когда вы пытаетесь войти или выйти, сначала вы отправляете SIGN_INIT, который устанавливает для «загрузки» значение true. Всякий раз, когда запрос завершен, действия SIGN_IN\SIGN_OUT будут обновлять вашу «загрузку» в магазине, и компонент будет уведомлен о завершении загрузки.
я только определил значение загрузки и установил его по умолчанию на true, всякий раз, когда вызываются действия, я меняю значение на false, отличается ли оно?
Вы вообще устанавливаете переменную
isSignedIn
вnull
?