>source

전화하기 전에 설정해야 하는 입력 필드가 있습니다.완전한 주문. 나는 다음을 사용하여 오류를 저장합니다.사용 상태, 어떤 필드가 설정되지 않았는지 계속 살펴보고 오류를 내부에 유지하려면 프로그램이 필요합니다.오류상태. 만약에오류상태가 비어 있지 않으면 해당 함수 호출을 차단합니다. 문제는 버튼을 클릭한 후 상태가 업데이트된다는 것입니다.사용 효과후크, 어떻게 올바르게합니까?

const OrderModal= (props)=> {
    const [errors, setErrors]= React.useState([])
    const [selectedFile, setSelectedFile]= React.useState(oldFile)
    const [startDate, setStartDate]= React.useState(new Date());
    const [endDate, setEndDate]= React.useState(null);
    const { isAuthenticated, user }= useAuth0();
    React.useEffect(()=> {
        let currentErrors= errors.map(err=> err.type)
        let newErrors= []
        if (!isAuthenticated &
&
 currentErrors.includes("authentication")) newErrors.push({ type: "authentication", message: "You must log in before creating an order!." })
        if (!selectedFile &
&
 currentErrors.includes("image")) newErrors.push({ type: "image", message: "Please select an image." })
        if (!startDate &
&
 currentErrors.includes("startDate")) newErrors.push({ type: "startDate", message: "Please select a start date." })
        if (!endDate &
&
 currentErrors.includes("endDate")) newErrors.push({ type: "endDate", message: "Please select an end date." })
        setErrors(newErrors)
    }, [isAuthenticated, selectedFile, startDate, endDate])
}
const renderInputErrors= ()=> {
        return (
            <>                {errors.length > 0 &amp;
&amp;
                    errors.map(e=> {
                        return (
                            <CAlert color="danger" dismissible>                                {e}
                            </CAlert>                        )
                    })
                }
            </>        )
    }
const onCompleteOrder= ()=> {
        if (errors.length > 0) return
        //complete the order if all fields are set.
    }

code에서 useEffect()에 대한 종속성 목록에 있는 상태 변수 변경을 트리거하는 항목을 찾을 수 없습니다.

Yevgen Gorbunkov2021-12-05 06:30:10

우선 useEffect 종속성 목록에 오류를 포함하거나 기능 상태 업데이트 setErrors(currentErrors=>...)를 사용해야 합니다. 두 번째로, 재현 가능한 최소한의 예를 제공할 수 있습니까?

Andrey2021-12-05 06:30:10
  • 이전 laravel : vuejs 3이 있는 inertiajs를 oneui-bootstrap-admin-dashboard-template에 추가하는 동안 오류가 발생했습니다.
  • 다음 wifi : Wi-Fi 스파이크, 솔루션을 찾을 수 없는 것 같습니다