• 1404/02/14

اشکال در مورد TextField :

سلام 

استاد تیکت فیلد رو مانند شما استفاده کردم حتی کد خود شما را اجرا کردم اشکالی که دارم اینه که به محض اینکه کاربر در تکست فیلد کارکتر می زنه یا صفحه رفرش میشه یا امکان داره که فرم خیلی جلوتر ساب میت میشه  و کلا صفحه پاک میشه  به نظر شما اشکال از کجاست

با تشکر

  • 1404/02/15
  • ساعت 12:56

سلام 

منظورتون این هست که کاربر فرم رو پر کرد و اگه مشکلی پیش اومد مثلا صفحه ریفرش شد اطلاعاتی که نوشته همچنان در فرم بمونه ؟

اگر منظورتون رو درست فهمیده باشم میتونید از localStorage استفاده کنید تا اطلاعات رو موقتاً نگهداری کنه

import React, { useEffect, useState } from 'react';

function MyForm() {
	const [name, setName] = useState('');

	// هنگام لود صفحه، داده رو از localStorage بخون
	useEffect(() => {
		const savedName = localStorage.getItem('name');
		if (savedName) {
			setName(savedName);
		}
	}, []);

	// هر بار که name تغییر کرد، داخل localStorage ذخیره کن
	useEffect(() => {
		localStorage.setItem('name', name);
	}, [name]);

	return (
		<form>
			<input
				type="text"
				value={name}
				onChange={(e) => setName(e.target.value)}
			/>
		</form>
	);
}

export default MyForm;

  • 1404/02/17
  • ساعت 11:17

سلام

استاد بهتر منظورم رو توضیح میدم. مانند درس کلاس چند تکست فیلد داریم مثلا نام و نام خانوادگی و...  که داخل form هستند مانند آنچه که در کلاس آموزش دادید.  همان درس صفحه ارتباط با من ... همان کدها را در نظر بگیرید. هنگام تست مثلا  اگر در فیلد نام شروع به وارد کردن اولین کارکتر که می کنم صفحه کلا سفید می شود همه ی تکست فیلد ها  دکمه ارسال و... ناپدید می شوند به نظرم  انگار صفحه رفرش میشه یا انگار state  عوض میشه که این طوری میشه . مجبور شدم از دستور e.prevent.این جور چیزها استفاده کنم تا اینکه به محض اینکه کاربر کارکتر وارد می کند اتفاقی نیفتد ولی با خودم گفتم استفاده از تکست فیلد نباید این قدر دردسر داشته باشه چون خود شما خیلی راحت استفاده کردید

با تشکر


  • 1404/02/18
  • ساعت 14:58

اگر امکان داره کدی که نوشتید رو اینجا قرار بدید تا بهتر بتونم کمکتون کنم


  • 1404/02/20
  • ساعت 07:34
import { useState, useEffect } from "react";

import { useFormik } from "formik";
import { useTheme } from "@mui/material/styles";
import {
    Divider,
    Chip,
    Typography,
    Card,
    CardContent,
    Slide,
    TextField,
    InputAdornment,
    CardActions,
    Button,
} from "@mui/material";
import Grid from "@mui/material/Unstable_Grid2";
import {
    AccountCircle,
    Face6Rounded,
    SubjectRounded,
    EmailRounded,
} from "@mui/icons-material";
import { Helmet } from "react-helmet-async";

import worldMap from "../assets/map.svg";
import { contactValidationSchema } from "./components/validations/contactValidation";

const Contact = ({ helmetTitle }) => {
    const [loading, setLoading] = useState(false);

    const theme = useTheme();

    useEffect(() => {
        setLoading(true);

        return () => {
            setLoading(false);
        };
    }, []);

    const contactInputNames = {
        fullname: "",
        email: "",
        subject: "",
        message: "",
    };

    const formik = useFormik({
        initialValues: contactInputNames,
        onSubmit: (values) => {
           console.log("Form Values: ", values);
        },
        validationSchema: contactValidationSchema,
    });

    return (
        <Card
            sx={{
                height: "100vh",
                backgroundColor: "whitesmoke",
                overflowY: "scroll",
                display: "flex",
                flexDirection: "column",
            }}
        >
            <Helmet>
                <title>{helmetTitle}</title>
            </Helmet>
            <CardContent>
                <Divider
                    textAlign="center"
                    sx={{
                        mt: 2,
                        "&::before, &::after": {
                            borderColor: "warning.main",
                        },
                    }}
                >
                    <Chip
                        icon={<AccountCircle />}
                        color="warning"
                        label={
                            <Typography
                                variant="body1"
                                color="black"
                                sx={{ textAlign: "center" }}
                            >
                                ارتباط با من
                            </Typography>
                        }
                        sx={{ p: 3 }}
                    />
                </Divider>

                <Grid container sx={{ mt: 5 }}>
                    <Slide
                        direction="up"
                        in={loading}
                        style={{
                            transitionDelay: loading ? "200ms" : "0ms",
                        }}
                    >
                        <Grid xs={12} sx={12} md={8}>
                            <Card
                                sx={{
                                    justifyContent: "center",
                                    alignItems: "center",
                                }}
                            >
                                <form
                                    autoComplete="off"
                                    onSubmit={formik.handleSubmit}
                                >
                                    <CardContent>
                                        <Grid container>
                                            <Grid
                                                xs={12}
                                                sx={{ direction: "ltr" }}
                                            >
                                                <Grid container spacing={2}>
                                                    <Grid xs={12} md={6}>
                                                        <TextField
                                                            fullWidth
                                                            size="small"
                                                            color="warning"
                                                            label="نام و نام خانوادگی"
                                                            name="fullname"
                                                            variant="outlined"
                                                            onKeyDown={(e)=>{
                                                                //  e.preventDefault()
                                                                }}
                                                            helperText={
                                                                formik.touched
                                                                    .fullname
                                                                    ? formik
                                                                          .errors
                                                                          .fullname
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .fullname &&
                                                                    formik
                                                                        .errors
                                                                        .fullname
                                                            )}
                                                            // value={
                                                            //     formik.values
                                                            //         ?.fullname
                                                            // }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                            InputProps={{
                                                                endAdornment: (
                                                                    <InputAdornment postion="end">
                                                                        <Face6Rounded />
                                                                    </InputAdornment>
                                                                ),
                                                            }}
                                                        />
                                                    </Grid>
                                                    <Grid xs={12} md={6}>
                                                        <TextField
                                                            fullWidth
                                                            size="small"
                                                            color="warning"
                                                            label="آدرس ایمیل"
                                                            name="email"
                                                            variant="outlined"
                                                            helperText={
                                                                formik.touched
                                                                    .email
                                                                    ? formik
                                                                          .errors
                                                                          .email
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .email &&
                                                                    formik
                                                                        .errors
                                                                        .email
                                                            )}
                                                            value={
                                                                formik.values
                                                                    ?.email
                                                            }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                            InputProps={{
                                                                endAdornment: (
                                                                    <InputAdornment postion="end">
                                                                        <EmailRounded />
                                                                    </InputAdornment>
                                                                ),
                                                            }}
                                                        />
                                                    </Grid>
                                                    <Grid xs={12} md={12}>
                                                        <TextField
                                                            fullWidth
                                                            size="small"
                                                            color="warning"
                                                            label="عنوان"
                                                            name="subject"
                                                            variant="outlined"
                                                            helperText={
                                                                formik.touched
                                                                    .subject
                                                                    ? formik
                                                                          .errors
                                                                          .subject
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .subject &&
                                                                    formik
                                                                        .errors
                                                                        .subject
                                                            )}
                                                            value={
                                                                formik.values
                                                                    ?.subjectj
                                                            }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                            InputProps={{
                                                                endAdornment: (
                                                                    <InputAdornment postion="end">
                                                                        <SubjectRounded />
                                                                    </InputAdornment>
                                                                ),
                                                            }}
                                                        />
                                                    </Grid>
                                                    <Grid xs={12} md={12}>
                                                        <TextField
                                                            fullWidth
                                                            multiline
                                                            rows={6}
                                                            size="small"
                                                            color="warning"
                                                            label="متن پیام"
                                                            name="message"
                                                            variant="outlined"
                                                            helperText={
                                                                formik.touched
                                                                    .message
                                                                    ? formik
                                                                          .errors
                                                                          .message
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .message &&
                                                                    formik
                                                                        .errors
                                                                        .message
                                                            )}
                                                            value={
                                                                formik.values
                                                                    ?.message
                                                            }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                        />
                                                    </Grid>
                                                </Grid>
                                            </Grid>
                                        </Grid>
                                    </CardContent>
                                    <CardActions
                                        sx={{
                                            alignItems: "end",
                                            flexDirection: "column",
                                        }}
                                    >
                                        <Button
                                            type="submit"
                                            color="success"
                                            variant="contained"
                                            sx={{ mt: 2 }}
                                            fullWidth
                                        >
                                            ارسال کن
                                        </Button>
                                    </CardActions>
                                </form>
                            </Card>
                        </Grid>
                    </Slide>
                    <Slide
                        direction="up"
                        in={loading}
                        style={{
                            transitionDelay: loading ? "200ms" : "0ms",
                        }}
                    >
                        <Grid
                            xs={0}
                            sm={0}
                            md={4}
                            sx={{
                                textAlign: "center",
                                backgroundImage: `url(${worldMap})`,
                                backgroundRepeat: "no-repeat",
                                backgroundPosition: "center",
                            }}
                        >
                            <Typography
                                variant="h6"
                                color="black"
                                sx={{
                                    fontFamily: "vazir",
                                    mt: 4,
                                    display: {
                                        xs: "none",
                                        sm: "none",
                                        md: "block",
                                    },
                                }}
                            >
                                بیا در مورد همه چیز باهم صحبت کنیم
                            </Typography>
                            <Typography
                                variant="body1"
                                color="black"
                                sx={{
                                    mt: 2,
                                    display: {
                                        xs: "none",
                                        sm: "none",
                                        md: "block",
                                    },
                                }}
                            >
                                👋{" "}
                                <a
                                    href="mailto:younes.gh@chmail.ir"
                                    alt="email"
                                    style={{
                                        color: "tomato",
                                    }}
                                >
                                    ایمیل
                                </a>{" "}
                                بزن به من
                            </Typography>
                        </Grid>
                    </Slide>
                </Grid>
            </CardContent>
        </Card>
    );
};

export default Contact;

  • 1404/02/20
  • ساعت 12:40

خوب در کدت چندین مورد هست که امکانش هست مشکلت از اینا باشه.

۱) اشتباه تایپی در formik.values :

در فیلد subject غلط املایی داری 

value={formik.values?.subject} //باید اینطوری باشه
value={formik.values?.subjectj} //ولی اینطوری نوشتی

اون subjectj اشتباه تایپی باعث میشه مقدار undefined بشه و چون مقدار درست value وارد نمیشه فرم ممکنه به شکلی غیرمنتظره رفتار کنه و رندر مجدد (یا حتی سفید شدن صفحه) اتفاق بیفته.

۲)مقداردهی نکردن value در فیلد fullname

در فیلد نام و نام خانوادگی (fullname) مقدار value به طور کامل کامنت شده:

// value={formik.values?.fullname}

وقتی شما از Formik استفاده میکنی باید حتماً value و onChange رو با هم تنظیم کنی چون TextField باید کنترل‌شده (controlled component) باشه. در غیر این صورت رندر مجدد یا رفتارهای غیرمنتظره اتفاق میافته.

3)مورد جزئی ولی مهم : اشتباه تایپی در InputAdornment

در تمام InputAdornmentها نوشتید:

<InputAdornment postion="end">
<InputAdornment position="end"> //باید به این صورت بنویسی

اون اشتباه تایپی (postion به جای position) باعث میشه آیکون درست کار نکنه هرچند بعیده باعث سفید شدن کامل صفحه بشه ولی بهتره اصلاحش کنی.

این موارد رو درست کن و مجدد تست کن ببین بازم اون مشکل رو داری یا نه

 


  • 1404/02/27
  • ساعت 16:29

با سلام  ممنون از صبوری تون  بلاخره کد به شکل زیر شد و توضیحات شما را لحاظ کردم ولی مشکل حل نمی شود!

import { useState, useEffect } from "react";

import { useFormik } from "formik";
import { useTheme } from "@mui/material/styles";
import {
    Divider,
    Chip,
    Typography,
    Card,
    CardContent,
    Slide,
    TextField,
    InputAdornment,
    CardActions,
    Button,
} from "@mui/material";
import Grid from "@mui/material/Unstable_Grid2";
import {
    AccountCircle,
    Face6Rounded,
    SubjectRounded,
    EmailRounded,
} from "@mui/icons-material";
import { Helmet } from "react-helmet-async";

import worldMap from "../assets/map.svg";
import { contactValidationSchema } from './components/validations/contactValidation';

const Contact = ({ helmetTitle }) => {
    const [loading, setLoading] = useState(false);

    const theme = useTheme();

    useEffect(() => {
        setLoading(true);

        return () => {
            setLoading(false);
        };
    }, []);

    const contactInputNames = {
        fullname: "",
        email: "",
        subject: "",
        message: "",
    };

    const formik = useFormik({
        initialValues: contactInputNames,
        onSubmit: (values) => {
            console.log("Form Values: ", values);
        },
        validationSchema: contactValidationSchema,
    });

    return (
        <Card
            sx={{
                height: "100vh",
                backgroundColor: "whitesmoke",
                overflowY: "scroll",
                display: "flex",
                flexDirection: "column",
            }}
        >
            <Helmet>
                <title>{helmetTitle}</title>
            </Helmet>
            <CardContent>
                <Divider
                    textAlign="center"
                    sx={{
                        mt: 2,
                        "&::before, &::after": {
                            borderColor: "warning.main",
                        },
                    }}
                >
                    <Chip
                        icon={<AccountCircle />}
                        color="warning"
                        label={
                            <Typography
                                variant="body1"
                                color="black"
                                sx={{ textAlign: "center" }}
                            >
                                ارتباط با من
                            </Typography>
                        }
                        sx={{ p: 3 }}
                    />
                </Divider>

                <Grid container sx={{ mt: 5 }}>
                    <Slide
                        direction="up"
                        in={loading}
                        style={{
                            transitionDelay: loading ? "200ms" : "0ms",
                        }}
                    >
                        <Grid xs={12} sx={12} md={8}>
                            <Card
                                sx={{
                                    justifyContent: "center",
                                    alignItems: "center",
                                }}
                            >
                                <form
                                    autoComplete="off"
                                    onSubmit={formik.handleSubmit}
                                >
                                    <CardContent>
                                        <Grid container>
                                            <Grid
                                                xs={12}
                                                sx={{ direction: "ltr" }}
                                            >
                                                <Grid container spacing={2}>
                                                    <Grid xs={12} md={6}>
                                                        <TextField
                                                            fullWidth
                                                            size="small"
                                                            color="warning"
                                                            label="نام و نام خانوادگی"
                                                            name="fullname"
                                                            variant="outlined"
                                                            helperText={
                                                                formik.touched
                                                                    .fullname
                                                                    ? formik
                                                                          .errors
                                                                          .fullname
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .fullname &&
                                                                    formik
                                                                        .errors
                                                                        .fullname
                                                            )}
                                                            value={
                                                                formik.values
                                                                    ?.fullname
                                                            }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                            InputProps={{
                                                                endAdornment: (
                                                                    <InputAdornment position="end">
                                                                        <Face6Rounded />
                                                                    </InputAdornment>
                                                                ),
                                                            }}
                                                        />
                                                    </Grid>
                                                    <Grid xs={12} md={6}>
                                                        <TextField
                                                            fullWidth
                                                            size="small"
                                                            color="warning"
                                                            label="آدرس ایمیل"
                                                            name="email"
                                                            variant="outlined"
                                                            helperText={
                                                                formik.touched
                                                                    .email
                                                                    ? formik
                                                                          .errors
                                                                          .email
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .email &&
                                                                    formik
                                                                        .errors
                                                                        .email
                                                            )}
                                                            value={
                                                                formik.values
                                                                    ?.email
                                                            }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                            InputProps={{
                                                                endAdornment: (
                                                                    <InputAdornment position="end">
                                                                        <EmailRounded />
                                                                    </InputAdornment>
                                                                ),
                                                            }}
                                                        />
                                                    </Grid>
                                                    <Grid xs={12} md={12}>
                                                        <TextField
                                                            fullWidth
                                                            size="small"
                                                            color="warning"
                                                            label="عنوان"
                                                            name="subject"
                                                            variant="outlined"
                                                            helperText={
                                                                formik.touched
                                                                    .subject
                                                                    ? formik
                                                                          .errors
                                                                          .subject
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .subject &&
                                                                    formik
                                                                        .errors
                                                                        .subject
                                                            )}
                                                            value={
                                                                formik.values
                                                                    ?.subject
                                                            }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                            InputProps={{
                                                                endAdornment: (
                                                                    <InputAdornment position="end">
                                                                        <SubjectRounded />
                                                                    </InputAdornment>
                                                                ),
                                                            }}
                                                        />
                                                    </Grid>
                                                    <Grid xs={12} md={12}>
                                                        <TextField
                                                            fullWidth
                                                            multiline
                                                            rows={6}
                                                            size="small"
                                                            color="warning"
                                                            label="متن پیام"
                                                            name="message"
                                                            variant="outlined"
                                                            helperText={
                                                                formik.touched
                                                                    .message
                                                                    ? formik
                                                                          .errors
                                                                          .message
                                                                    : null
                                                            }
                                                            error={Boolean(
                                                                formik.touched
                                                                    .message &&
                                                                    formik
                                                                        .errors
                                                                        .message
                                                            )}
                                                            value={
                                                                formik.values
                                                                    ?.message
                                                            }
                                                            onChange={
                                                                formik.handleChange
                                                            }
                                                        />
                                                    </Grid>
                                                </Grid>
                                            </Grid>
                                        </Grid>
                                    </CardContent>
                                    <CardActions
                                        sx={{
                                            alignItems: "end",
                                            flexDirection: "column",
                                        }}
                                    >
                                        <Button
                                            type="submit"
                                            color="success"
                                            variant="contained"
                                            sx={{ mt: 2 }}
                                            fullWidth
                                        >
                                            ارسال کن
                                        </Button>
                                    </CardActions>
                                </form>
                            </Card>
                        </Grid>
                    </Slide>
                    <Slide
                        direction="up"
                        in={loading}
                        style={{
                            transitionDelay: loading ? "200ms" : "0ms",
                        }}
                    >
                        <Grid
                            xs={0}
                            sm={0}
                            md={4}
                            sx={{
                                textAlign: "center",
                                backgroundImage: `url(${worldMap})`,
                                backgroundRepeat: "no-repeat",
                                backgroundPosition: "center",
                            }}
                        >
                            <Typography
                                variant="h6"
                                color="black"
                                sx={{
                                    fontFamily: "vazir",
                                    mt: 4,
                                    display: {
                                        xs: "none",
                                        sm: "none",
                                        md: "block",
                                    },
                                }}
                            >
                                بیا در مورد همه چیز باهم صحبت کنیم
                            </Typography>
                            <Typography
                                variant="body1"
                                color="black"
                                sx={{
                                    mt: 2,
                                    display: {
                                        xs: "none",
                                        sm: "none",
                                        md: "block",
                                    },
                                }}
                            >
                                👋{" "}
                                <a
                                    href="mailto:younes.gh@chmail.ir"
                                    alt="email"
                                    style={{
                                        color: "tomato",
                                    }}
                                >
                                    ایمیل
                                </a>{" "}
                                بزن به من
                            </Typography>
                        </Grid>
                    </Slide>
                </Grid>
            </CardContent>
        </Card>
    );
};

export default Contact;

  • 1404/03/01
  • ساعت 15:31

بابت تاخیر عذرخواهی میکنم

فکر نمیکنم بیشتر از این بتونم به این شکل کمکت کنم

اگر هنوزم مشکلت پابرجا هست در گیت هاب یا اصلا در جایی پروژه رو آپلود کن 

نیاز هست که نگاهی بهش بندازم تا بتونم بیشتر کمکتون کنم


logo-enamadlogo-samandehi