Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 再次单击并更改状态值_Reactjs_React Hooks - Fatal编程技术网

Reactjs 再次单击并更改状态值

Reactjs 再次单击并更改状态值,reactjs,react-hooks,Reactjs,React Hooks,我有个问题,不知道发生了什么。我的代码运行良好,我用钩子更改状态值。虽然一切正常,但在我的控制台中,我在第一次单击按钮时会遇到上一个状态值。当我第二次单击按钮时,状态值开始正确出现。根据胡克斯的说法,这是合乎逻辑的还是我遗漏了什么 我的示例Login.tsx: import React, { useState, useContext, useEffect } from 'react'; import { Input, Button, DropDownMenu, Checkbox } from '

我有个问题,不知道发生了什么。我的代码运行良好,我用钩子更改状态值。虽然一切正常,但在我的控制台中,我在第一次单击按钮时会遇到上一个状态值。当我第二次单击按钮时,状态值开始正确出现。根据胡克斯的说法,这是合乎逻辑的还是我遗漏了什么

我的示例Login.tsx:

import React, { useState, useContext, useEffect } from 'react';
import { Input, Button, DropDownMenu, Checkbox } from 'oneframe-react';
import { useTranslation } from 'react-i18next';

export const LoginPart = (props: any) => {

    interface IState {
        pageLanguage: any;
        email: string;
        password: string;
        rememberMeCheck: boolean;

    }


    const initialState: IState = {
        email: '',
        password: '',
        pageLanguage: '',
        rememberMeCheck: false,

    };

    const [leftPartState, setState] = useState<any>(initialState);
    const { t, i18n } = useTranslation();


    const handleChange = (e: any) => {
        setState((prevState: any) => ({
            ...prevState,
            [e.target.name]: e.target.value,
        }));
    };

    const handleCheckBoxChange = (e: any) => {
        setState( (prevState : any) => ({
            ...prevState,
            [e.target.name]: e.target.checked,
        }));
    };


    const handleSubmit: any = (e: Event) => {

      // fallowing code changes values but console situations are like : 
      // {email: "", password: "", pageLanguage: "", rememberMeCheck: false}   -> first click and print 
      // {email: "", password: "", pageLanguage: "eng", rememberMeCheck: true} -> second click and print
     setState({...leftPartState, email: '', password: '',rememberMeCheck:true, pageLanguage : localStorage.getItem("userlanguage")})
        e.preventDefault();
        console.log(leftPartState)
    }

    const handleClick : any = (selectedlang: any) => {

        leftPartState.pageLanguage = selectedlang.Name
        setState({...leftPartState, pageLanguage :leftPartState.pageLanguage  })
         i18n.changeLanguage(selectedlang.Name) 
        localStorage.setItem("userlanguage", selectedlang.Name)  
    }

    useEffect(() => {

    },[leftPartState])


    const renderLoginPart = () => {
        return (
            <div className="render-login-part-container">
                <form onSubmit={() => handleSubmit(event)}>

                    <DropDownMenu
                        className="select-language"
                        fullWidth={false}
                        options={{
                            data: [
                                {
                                    Name: 'tr',
                                    Id: 1,
                                },
                                {
                                    Name: 'eng',
                                    Id: 2,
                                }
                            ],
                            displayField: 'Name',
                            displayValue: 'Id',
                            selected: 1
                        }}
                        onClick={(event : Event) => handleClick(event)}
                    />

                    <Input
                        id="basicInput"
                        name="email"
                        caption={t('email')}

                        type="text"
                        onChange={handleChange}
                        value={leftPartState.email}
                        rightAdornments={() => {
                            return <i className="fal fa-envelope mr-1"></i>;
                        }}
                        className="login-input"

                    />

                    <Input
                        id="basicInput"
                        name="password"
                        caption={t('password')}
                        type="password"
                        onChange={handleChange}
                        value={leftPartState.password}
                        rightAdornments={() => {
                            return <i style={{ cursor: "pointer" }} className="far fa-eye-slash"></i>;
                        }}
                        className="login-input mt-2"
                    />
                    <div className="container">
                        <div className="row rememberme-and-forgotpassword-container">
                            <div>

                                {/* Not: Checked özelliği ayarlanmalı */}
                            <Checkbox
                                    id={'rememberMeCheck'}
                                    name={'rememberMeCheck'}
                                    label={t("rememberMe")}
                                    checked={leftPartState.rememberMeCheck?true:false}
                                    onChange={handleCheckBoxChange}
                                    className="rememberme-checkbox"
                                />
                            </div>
                            <div>
                                <p className="forgot-password-text">{t("forgotPassword")}</p>
                            </div>
                        </div>
                    </div>

                    <Button
                        type="submit"
                        text={t("login")}
                        variant={'text'}
                        className={'custom-style-text-button'}
                        fullWidth
                    />
                </form>
            </div>
        )
    }

    return (
        <span>
            {renderLoginPart()}
        </span>
    )
}


export default connect((store: any) => ({ oneframe: store }))(LoginPart) as any;
import React,{useState,useContext,useffect}来自“React”;
从“oneframe react”导入{输入,按钮,下拉菜单,复选框};
从“react-i18next”导入{useTranslation};
导出常量LoginPart=(道具:任意)=>{
界面状态{
页面语言:任意;
电子邮件:字符串;
密码:字符串;
记忆检查:布尔;
}
常量初始状态:IState={
电子邮件:“”,
密码:“”,
页面语言:“”,
记住检查:false,
};
常量[leftPartState,setState]=使用状态(initialState);
const{t,i18n}=useTranslation();
常量handleChange=(e:any)=>{
设置状态((prevState:any)=>({
…国家,
[e.target.name]:e.target.value,
}));
};
const handleCheckBoxChange=(e:any)=>{
设置状态((prevState:any)=>({
…国家,
[e.target.name]:e.target.checked,
}));
};
const handleSubmit:any=(e:Event)=>{
//暂停代码更改值,但控制台情况如下:
//{电子邮件:,密码:,页面语言:,记住检查:false}->第一次单击并打印
//{电子邮件:,密码:,页面语言:“eng”,记住检查:true}->再次单击并打印
setState({…leftPartState,电子邮件:“”,密码:“”,rememberMeCheck:true,pageLanguage:localStorage.getItem(“userlanguage”)})
e、 预防默认值();
console.log(leftPartState)
}
const handleClick:any=(selectedlang:any)=>{
leftPartState.pageLanguage=selectedlang.Name
setState({…leftPartState,pageLanguage:leftPartState.pageLanguage})
i18n.changeLanguage(selectedlang.Name)
localStorage.setItem(“userlanguage”,selectedlang.Name)
}
useffect(()=>{
},[leftPartState])
const renderLoginPart=()=>{
返回(
handleSubmit(事件)}>
handleClick(事件)}
/>
{
返回;
}}
className=“登录输入”
/>
{
返回;
}}
className=“登录输入mt-2”
/>
{/*不是:切丁·泽利奥伊·阿亚兰马尔*/}

{t(“忘记密码”)}

) } 返回( {renderLoginPart()} ) } 将默认连接((存储:任意)=>({oneframe:store}))(LoginPart)导出为任意;
设置状态本质上是异步的。您不会在设置后立即获得更新的状态。您可以使用
useffect
hook在每次状态更改时获取更新的状态值-

const handleSubmit: any = (e: Event) => {

  // fallowing code changes values but console situations are like : 
  // {email: "", password: "", pageLanguage: "", rememberMeCheck: false}   -> first click and print 
  // {email: "", password: "", pageLanguage: "eng", rememberMeCheck: true} -> second click and print
 setState({...leftPartState, email: '', password: '',rememberMeCheck:true, pageLanguage : localStorage.getItem("userlanguage")})
    e.preventDefault();
    console.log(leftPartState)
}

useEffect(() => {
   console.log(leftPartState);
}, [leftParState]);

设置状态本质上是异步的。您不会在设置后立即获得更新的状态。您可以使用
useffect
hook在每次状态更改时获取更新的状态值-

const handleSubmit: any = (e: Event) => {

  // fallowing code changes values but console situations are like : 
  // {email: "", password: "", pageLanguage: "", rememberMeCheck: false}   -> first click and print 
  // {email: "", password: "", pageLanguage: "eng", rememberMeCheck: true} -> second click and print
 setState({...leftPartState, email: '', password: '',rememberMeCheck:true, pageLanguage : localStorage.getItem("userlanguage")})
    e.preventDefault();
    console.log(leftPartState)
}

useEffect(() => {
   console.log(leftPartState);
}, [leftParState]);
可能的重复可能的重复