javascript - 当 redux 连接状态发生变化时,有状态的 react-native 功能组件不会重新渲染
问题描述
我最近开始使用带有 react-native 的钩子,所以我有这个连接的组件和一个按钮,该按钮会根据 redux 状态而变化。当组件内部更新 redux 状态时,按钮会更改,但如果来自外部则不会。
这是我的按钮:
<TouchableOpacity
style={styles.goPremiumContainer}
onPress={() => pay()}>
{props.premiumLoading ? (
<ActivityIndicator size="small" color="#fff" />)
:
(<Text style={styles.goPremium}>
{i18n.t('premium:go_premium')}
</Text>)}
</TouchableOpacity>
//
//
//
const mapStateToProps = state => {
return {
premiumLoading: state.premiumLoading,
};
};
export default withNamespaces([], {wait: true})(
connect(mapStateToProps)(Premium),
);
还有减速机:
const initialState = false;
function updateButtonLoading(state = initialState, action) {
let nextState;
switch (action.type) {
case 'LOADING':
nextState = true;
return nextState || state;
case 'NOT_LOADING':
nextState = false;
return nextState || state;
default:
return state;
}
}
export default updateButtonLoading;
要更新按钮,我调用此操作函数:
async updatePremiumButton(actionType) {
console.log('actionType',actionType)
const action = {type: actionType};
const unsubscribe = store.subscribe(() => true);
await store.dispatch(action);
await unsubscribe();
},
谢谢!
解决方案
问题是减速器内部的逻辑。
switch (action.type) {
case 'LOADING':
nextState = true;
return nextState || state;
case 'NOT_LOADING':
nextState = false;
return nextState || state;
default:
return state;
}
看来您真正想要做的是返回您分配的值nextState
,但逻辑读取不同。
目前的逻辑是:如果nextState
是真的使用它,否则返回以前的状态。
在这种NOT_LOADING
情况下,您打算返回 value false
,但逻辑显示:如果false
为真,则返回false
,否则返回true
。所以你可以明白为什么这永远行不通。
相反,简化案例并返回您想要的状态。||
条件似乎没有必要。
function updateButtonLoading(state = initialState, action) {
switch (action.type) {
case 'LOADING':
return true;
case 'NOT_LOADING':
return false;
default:
return state;
}
}
推荐阅读
- java - 用于查找特定字符串的 Java 正则表达式
- matlab - 根据给定矩阵的对角线和反对角线创建新矩阵
- wso2 - 如何将事件插入 http sink 彼此分开?
- react-admin - 如何为 TextField 应用 Material-ui 样式
- tensorflow - 如何构建一个神经网络来推断最重要特征的一组值?
- docker - Dockercompose 无法使用主机名访问
- ios - 如何避免将核心数据实体作为错误获取?
- javascript - 从数据库中获取数据后,setState 在本机反应中不起作用
- r - 合并两个数据框,但意味着两者中都存在的列
- python - 避免对特定列 pandas 进行四舍五入