【发布时间】:2020-08-13 12:11:05
【问题描述】:
很抱歉,我发现 React Native 令人困惑和令人费解。我将下面的代码用作“帮助程序”脚本来保存可由单独组件访问的对象值。
LogContext.js
import React, { useState } from 'react'
export const LogContext = React.createContext({
set: "en",
login: "false",
setLog: () => {},
});
export const LogContextProvider = (props) => {
const setLog = (login) => {
setState({set: "jp", login: login, setLog});
};
const initState = {
set: "en",
login: "false",
setLog,
};
const [state, setState] = useState(initState);
return (
<LogContext.Provider value={state}>
{props.children}
</LogContext.Provider>
);
};
我的问题是能够从另一个组件调用“setLog”以更改“状态”对象的值。例如:
AnyOtherComponent.js
import React, { useState, useContext, createContext } from 'react'
import { Button, TouchableOpacity, Text } from 'react-native'
import { Actions } from 'react-native-router-flux'
import { LogContextProvider, LogContext } from './LogContext'
const AnyOtherComponent = (props) => {
const status = useContext(LogContext);
//status.setLog('true'); //also tried to call the 'update' here...
const goToHome = () => {
status.setLog('true'); //call doesn't update object values here either...
Actions.home()
}
return (
<>
<Text>This is Proceed</Text>
<Text>Passed SET: {JSON.stringify(status.set)}</Text>
<Text>Passed LOGIN: {JSON.stringify(status.login)}</Text>
<Button title="Update" onPress={goToHome} />
</>
)
}
export default AnyOtherComponent
Home.js
import React, { useState, useContext, createContext } from 'react'
import { Button, TouchableOpacity, Text } from 'react-native';
import { Actions } from 'react-native-router-flux';
import { LogContextProvider, LogContext } from './LogContext'
const Home = () => {
const status = useContext(LogContext);
const goToAbout = () => {
Actions.about()
}
const goToLogin = () => {
Actions.login()
}
return (
<LogContext.Provider value={status}>
<TouchableOpacity style = {{ margin: 128 }} onPress = {goToAbout}>
<Text>This is HOME!</Text>
<Text>Passed SET: {JSON.stringify(status.set)}</Text>
<Text>Passed LOGIN: {JSON.stringify(status.login)}</Text>
</TouchableOpacity>
{status.login === 'false' ? (
<Button
title="Go to Login"
onPress={goToLogin}
/>
) : (
<Button
title="BroadCast"
onPress={() => Actions.BroadCast()}
/>
)}
</LogContext.Provider>
)
}
export default Home
我也尝试使用“useEffect”但没有成功(如注释掉的行中所示)。在这种情况下,错误似乎与我正在使用的导航有关(React-Native-Router-Flux)。非常感谢任何建议。
【问题讨论】:
标签: react-native helper react-native-router-flux