我正在使用ReactContext
和Hooks
在单击按钮时显示和隐藏Modal
。
以下是我的上下文代码
const setPrivacyPolicyModalVisibility = dispatch => {
return ({visible}) => {
visible
? dispatch({type: 'enablePrivacyPolicyModalVisibility'})
: dispatch({type: 'disablePrivacyPolicyModalVisibility'});
};
};
相同的reducer代码如下
case 'enablePrivacyPolicyModalVisibility':
return {...state, ...{enablePrivacyPolicy: true}};
case 'disablePrivacyPolicyModalVisibility':
return {...state, ...{enablePrivacyPolicy: false}};
我班上的一些设置代码
const {state, setPrivacyPolicyModalVisibility} = useContext(Context);
const [privacyVisibility, setPrivacyVisibility] = useState(false);
点击按钮,我正在调用以下代码
<TouchableOpacity
onPress={() => {
setPrivacyVisibility(true);
console.log(`${privacyVisibility}`);
setPrivacyPolicyModalVisibility({privacyVisibility});
}}.....
如您所见,我正在控制台记录privacyVisibility
值,但它始终是错误的,我无法理解
以下是我在组件中隐藏或显示Modal的代码
{state.enablePrivacyPolicy ? (
<SettingsPrivacyModal visible={true} />
) : (
<SettingsPrivacyModal visible={false} />
)}
模态代码是正确的,因为我尝试将默认值设置为true只是为了检查模态是否可见然后可以工作,但是单击按钮时状态值不会改变,并且我无法看到模态为该值始终为假
答案 0 :(得分:0)
问题似乎出在adb
回调中:
adb
当周期到达回调时,adb devices
的默认值为onPress
。我认为您假设一旦调用onPress={() => {
const privacyVisibility_new = !privacyVisibility;
console.log( privacyVisibility_new );
setPrivacyVisibility( privacyVisibility_new );
setPrivacyPolicyModalVisibility( privacyVisibility:privacyVisibility_new );
}}
,则privacyVisibility
变量将在同一周期中具有新值。但是在组件再次呈现之前,它不会具有更新的值。
false
似乎不正确。我不确定确切在哪里调度,但是假设它与您可以在内部简单使用的功能处于同一级别。
setPrivacyVisibility
您可能想简化减速器并直接发送privacyVisibility
值:
setPrivacyPolicyModalVisibility
。
const setPrivacyPolicyModalVisibility = visible => {
if ( visible ) {
dispatch({ type: "enablePrivacyPolicyModalVisibility" });
} else {
dispatch({ type: "disablePrivacyPolicyModalVisibility" });
}
};
答案 1 :(得分:0)
实际上,错误很简单。我在setPrivacyPolicyModalVisibility中将visible参数用作props,但是在设置时,我正在传递不同名称的prop
感谢@Alvaro向我指出正确的方向