【发布时间】:2021-06-26 02:31:19
【问题描述】:
我在 React Js 中将 State Hook 传递给子功能组件没有成功。传递的函数打印未定义,控制台显示“TypeError 中的错误签名:updateUser 不是函数”。父组件是 App.js 组件,子组件是 LoginPage.js。我的最终目标是确保使用 AWS Cognito/AWS Amplify 在整个应用程序中对用户进行身份验证。如果用户状态未通过身份验证,我将用户发送到 LoginPage。
具体来说,如下所示,我将“updateUser={updateUser}”传递给 LoginPage.js 组件,它被读取为“LoginPage({updateUser})”,并用作“updateUser(user)”。简化的父子组件如下:
function App() {
const [user, updateUser] = useState(null);
useEffect(() => {
checkUser()
}, []
)
async function checkUser() {
try {
const user = await Auth.currentAuthenticatedUser();
updateUser(user)
}
catch (e) {
console.log(e)
}
}
if (!user) {
return <LoginPage updateUser={updateUser} />
} else {
return (
<div>
<BrowserRouter>
<Switch>
<Route path="/" component={LoginPage} exact />
<Route path="/HomePage" component={HomePage} exact />
</Switch>
</BrowserRouter>
</div>
);
}
}
export default App;
export default function LoginPage({updateUser}) {
async function signIn(e) {
e.preventDefault()
const {email, password} = formState
try {
await Auth.signIn(email, password);
const user = await Auth.currentAuthenticatedUser();
console.log(updateUser) // updateUser is undefined
updateUser(user)
})
} catch (error) {
console.log(error)
}
}
return (
<div>
// Login page here, but irrelevant
<div>
)
}
LoginPage.propTypes = {
updateUser: PropTypes.func.isRequired
}
【问题讨论】:
标签: javascript reactjs react-hooks