老师,为什么获取不到user

来源:5-5 用useContext存储全局用户信息

FanYiyang

2021-07-08

js对象取属性值,打印这个对象可以看到这个属性,但是为什么取不到?

import { useState } from 'react'
import { Form, Input, Button } from 'antd'
import { LoginUser } from 'interface/user'
import { register } from 'hooks/loginRegister'
import { useAuth } from 'context/AuthContext'
// 继承登录接口的信息
interface RegisterUser extends LoginUser {
  cpassword: string
}
export const Login = () => {
  const { login, user } = useAuth()
  console.log(
    '%c 🍼️ user: ',
    'font-size:20px;background-color: #EA7E5C;color:#fff;',
    user
  )
  // 是否是组册状态,默认为登录模式
  const [isRegister, setIsRegister] = useState(true)

  // 点击登录的时候或者注册时候
  const onFinish = (values: RegisterUser | LoginUser) => {
    if (isRegister) {
      login(values)
    } else {
      register(values as RegisterUser)
    }
  }
  const [form] = Form.useForm()

  // 点击切换的时候取消验证
  const onReset = () => {
    setIsRegister(!isRegister)
    form.resetFields()
  }
  return (
    <>
      {console.log(
        '%c 🍪 user: ',
        'font-size:20px;background-color: #E41A6A;color:#fff;',
       user
      )} == >这里可以获取到user,对象,但是我去user.name确实undefined?
      {user ? <div>用户名:{user.name}为啥子</div> : null}
      <Form
        form={form}
        name="basic"
        labelCol={{ span: 8 }}
        wrapperCol={{ span: 16 }}
        initialValues={{ remember: true }}
        onFinish={onFinish}
      >
        <Form.Item
          name="username"
          rules={[{ required: true, message: '请输入用户名' }]}
        >
          <Input placeholder="用户名" />
        </Form.Item>
        <Form.Item
          name="password"
          rules={[{ required: true, message: '请输入密码' }]}
        >
          <Input.Password placeholder="密码" />
        </Form.Item>
        {!isRegister ? (
          <Form.Item
            name="cpassword"
            dependencies={['password']}
            rules={[
              { required: true, message: '请确认密码' },
              ({ getFieldValue }) => ({
                validator(_, value) {
                  if (!value || getFieldValue('password') === value) {
                    return Promise.resolve()
                  }
                  return Promise.reject(new Error('两次密码不一致!'))
                }
              })
            ]}
          >
            <Input.Password id="cpassword" placeholder="再次确认密码" />
          </Form.Item>
        ) : null}

        <Form.Item>
          <Button type="primary" htmlType="submit">
            {isRegister ? '登录' : '注册'}
          </Button>
        </Form.Item>
        <Form.Item>
          <Button type="link" onClick={onReset}>
            {isRegister ? (
              <span>没有账号?注册新的账号</span>
            ) : (
              <span>已有账号,直接登录</span>
            )}
          </Button>
        </Form.Item>
      </Form>
    </>
  )
}

写回答

1回答

Nolan

2021-07-09

也就是说 user 是有的,但是 user.name 是 undefined?首先你要把user打印出来,看看它是什么值;然后如果值不是你想要的,一层一层向上追溯,查一下哪里出了问题;可以直接去看一下接口的返回,比如是register就看register接口返回什么

0
1
FanYiyang
对的,谢谢老师,就是接口的问题
2021-07-11
共1条回复

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程