最初のチームプロジェクトを完了します.

18155 ワード

2週間のチームプロジェクトが終了しました.一つの文章の総評は以下の通りである.
「人間はいつも同じ過ちを繰り返す」
プロジェクト期間中に最善を尽くさなかった瞬間がもったいない.立ち直ることができ、変化の立脚点となった瞬間は何度もあった.プロジェクト全体の間、無力な気持ちから抜け出すことができなかった.「どんな問題ですか」実力が足りない.積極性が足りない.いかなる弁解も問題解決の根本的な策ではない.
「1:29:300の法則」とも呼ばれています.すなわち,大災害,小災害,小事故の発生割合は1:29:300であった.言い換えれば、大災害はいつも小さなことを無視しているときに起こる.
今の「私」は過去の私の少しずつ蓄積した産物にすぎない.アインリッヒの法則はプロジェクトの結果を確実に説明した.キャンプを始めて2、3ヶ月が経ちました.一日一日と最善を尽くせなかった日々が积み重ねられ、私には足りない実力となりました.他人の世話をすることを口実に、自分の主張のない過去が、私を今日の消極的な分子にした.
変えなければなりません.しかし、今この文章を書いているこの瞬間も上記のように、同じ間違いを繰り返すのが怖い.一朝一夕では完全に変わることはできませんが、意識的に少しずつ改善していく必要があります.「ありふれた話だが、今考えているのはこの二つの文だ」.「俺が先にできるんだよ!!!」
I can do it.     Just do it.

メリット


プロジェクト期間中に思い出した100種類の記憶のうち、残念な瞬間が9割だったとしたら、嬉しい瞬間が1割でした.
まず、問題に遭遇したとき、自分が悩んだり、インターネットで検索したり、問題を解決したりするのにかかる時間が印象的です.本当に悩んでいたので、どうしてもダメだと思ったら周りに助けを求めていました.あなたが助けを求めると、「この問題を解決してください.いいえ、Aの問題があります.私はBの方法を考えていますが、あまりよくありません.Cの解決方法かxxはどんな方法でやったのかもしれません.」質問するときは、私が直面している質問や質問のポイントを上手に把握できるように努力します.その結果,適切なフィードバックが得られ,完全な解決策ではなく提示によって問題を解決した瞬間を喜んだ.
これはほんの一部かもしれませんが、問題が解決する前に、私の気持ちはとても興奮して、一瞬の瞬間でしたが、開発日の魅力を再び感じました.

残念な点


前に述べたように、残念ながら尽力しなかった.チームプロジェクトの重要性に気づくのが遅すぎる.楽すぎる気持ちで参加した.私の考えは自分の役に忠実だ.過去を振り返ると、私たちの選手だけでなく、他のチームの情熱も見て、私は反省し始めました.私の参加度によっては、2週間以内にもっと多くのことを学ぶ機会です.その機会を逃したようで、もったいない.過去のことをきっかけに、2つ目のプロジェクトでは、私の能力を最大限に向上させるきっかけになるよう努力します.

動画リスト


https://youtu.be/TkbnRMxwWDI

コード共有


会員登録有効性検査を行った.条件が満たされないとエラーが発生し、次のページには移動しません.会員入力では,条件が多いためvalidate関数のif,else ifなどがコードを長くする.id、passwordごとにvalidate関数を割り当てるより良い方法を探しています.
function Signup() {
  const initialValues = {
    username: '',
    email: '',
    password: '',
    passwordcheck: '',
  };
  const [formValues, setFormValues] = useState(initialValues);
  const [formErrors, setFormErrors] = useState({});
  const [isSubmit, setIsSubmit] = useState(false);

  const handleChange = e => {
    const { name, value } = e.target;
    setFormValues({ ...formValues, [name]: value });
  };

  const handleSubmit = e => {
    e.preventDefault();
    setFormErrors(validate(formValues));
    setIsSubmit(true);
    sendForm(formValues);
  };

  const sendForm = formValues => {
    fetch('http://localhost:8000/user/signup', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username: formValues.username,
        email: formValues.email,
        password: formValues.password,
      }),
    })
      .then(res => res.json())
      .then(res => console.log(res));
    console.log({
      username: formValues.username,
      email: formValues.email,
      password: formValues.password,
    });
  };

  const navigate = useNavigate();

  useEffect(() => {
    if (Object.keys(formErrors).length === 0 && isSubmit) {
    }
  }, [formErrors, isSubmit]);

  const validate = values => {
    const errors = {};
    const emailRegex =
      /^([0-9a-zA-Z_.-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}$/;
    const pwRegex =
      /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/;

    if (!values.email) {
      errors.email = '아이디를 입력해주세요.';
      return errors;
    } else if (!emailRegex.test(values.email)) {
      errors.email = '아이디가 형식에 맞지 않습니다.';
      return errors;
    } 

	if (!values.password) {
      errors.password = '비밀번호를 입력해주세요.';
      return errors;
    } else if (
      values.password.length < 8 ||
      values.password.length > 16 ||
      !pwRegex.test(values.password)
    ) {
      errors.password = '비밀번호가 형식에 맞지 않습니다.';
      return errors;
    }

    if (values.password !== values.passwordcheck) {
      errors.passwordcheck = '비밀번호가 일치하지 않습니다.';
      return errors;
    }

    if (!values.username) {
      errors.username = '이름을 입력해주세요.';
      return errors;
    } else if (values.username.length < 2 || values.username.length > 5) {
      errors.username = '이름이 형식에 맞지 않습니다.';
      return errors;
    }

    return navigate('../login');
  };