React:状態変数を使用して別のコンポーネントから関数を実行するにはどうすればよいですか?

ニクラス

私はこの無料のコンポーネントを持っています:

私のLoginForm:

import React, { Component } from "react";
import { Pane, TextInputField, Checkbox, Button } from "evergreen-ui";
import { validateEmail, validatePassword } from "./FormValidator";

class LoginForm extends Component {
  constructor(props) {
    super(props);
    this.state = {
      passwordErr: {
        status: false,
        value: ""
      },
      emailErr: {
        status: false,
        value: ""
      },
      email: "",
      password: "",
      CheckBoxchecked: false
    };
    this.handleSubmit = this.handleSubmit.bind(this);
    this.handleCheckbox = this.handleCheckbox.bind(this);
  }

  handleEmailInput = e => {
    const email = e.target.value;
    this.setState({ email: email });
  };

  handlePasswordInput = e => {
    const password = e.target.value;
    this.setState({ password: password });
  };

  handleCheckbox() {
    this.setState({
      CheckBoxchecked: !this.state.CheckBoxchecked
    });
  }

  handleSubmit() {
    if (this.checkFormStatus()) {
      alert("Form OK");
    }
  }

  checkFormStatus() {
    // form validation middleware
    const { email, password } = this.state;
    const emailErr = validateEmail(email);
    const passwordErr = validatePassword(password);

    if (!emailErr.status && !passwordErr.status) {
      return true;
    } else {
      this.setState({
        emailErr,
        passwordErr
      });
      return false;
    }
  }

  render() {
    return (
      <Pane padding={15}>
        <TextInputField
          tabIndex={0}
          required
          isInvalid={this.state.emailErr.status}
          validationMessage={
            this.state.emailErr.status ? this.state.emailErr.value : false
          }
          onChange={this.handleEmailInput}
          value={this.state.email}
          appearance="neutral"
          type="email"
          label="Your email-address"
          inputHeight={36}
          //description="We’ll need your email-address to create an new account"
        />
        <TextInputField
          required
          validationMessage={
            this.state.passwordErr.status ? this.state.passwordErr.value : false
          }
          isInvalid={this.state.passwordErr.status}
          onChange={this.handlePasswordInput}
          value={this.state.password}
          appearance="neutral"
          label="Your Password"
          type="password"
          inputHeight={36}
          //description="Create a secure password to protect your account"
        />
        <Checkbox
          label="Keep me logged in"
          checked={this.state.CheckBoxchecked}
          onChange={this.handleCheckbox}
        />
      </Pane>
    );
  }
}
export default LoginForm;

私のエクスポートLoginFormButton:

export class LoginFormButton extends Component {

  render() {
    return (
      <Button
        appearance="primary"
        marginLeft={8}
        marginRight={16}
        intent="success"
        onClick={} //How can i call handleSubmit() from here?
      >
        Login
      </Button>
    );
  }
}

と私のダイアログ...

import ReactDOM from "react-dom";
import LoginForm from './LoginForm';
import LoginFormButton from './LoginFormButton';

class LoginDialog extends Components {

  render(
    return(
      <Dialog>
        <LoginForm/>
        <div className="Footer">
          <LoginFormButton/>
        </div>
      </Dialog>   
    );  
  )
}

handleSubmit()LoginFormコンポーネントに関数を保存しています。LoginFormButtonからこれらの関数を呼び出したい。このボタンは、ダイアログコンポーネントに含まれています。

ここに画像の説明を入力してください

これどうやってするの?あなたの答えと私たちの助けをありがとう。私は初心者なので、正確にはわかりません。どうすればこれを実装できますか。

ニーラジ・クマール

LoginFormコンポーネントと、フォームの送信を処理するLoginFormButtonが必要なようです。

import React, { Component } from "react";
import { Pane, TextInputField, Checkbox, Button } from "evergreen-ui";
import { validateEmail, validatePassword } from "./FormValidator";

const LoginFormButton = ({ handleSubmit }) => {
    return (
      <Button
        appearance="primary"
        marginLeft={8}
        marginRight={16}
        intent="success"
        onClick={() => handleSubmit()} // or just -> onClick={handleSubmit}
      >
        Login
      </Button>
    );
}

class LoginForm extends Component {
  constructor(props) {
    super(props);
    this.state = {
      passwordErr: {
        status: false,
        value: ""
      },
      emailErr: {
        status: false,
        value: ""
      },
      email: "",
      password: "",
      CheckBoxchecked: false
    };
    this.handleSubmit = this.handleSubmit.bind(this);
    this.handleCheckbox = this.handleCheckbox.bind(this);
  }

  handleEmailInput = e => {
    const email = e.target.value;
    this.setState({ email: email });
  };

  handlePasswordInput = e => {
    const password = e.target.value;
    this.setState({ password: password });
  };

  handleCheckbox() {
    this.setState({
      CheckBoxchecked: !this.state.CheckBoxchecked
    });
  }

  handleSubmit() {
    if (this.checkFormStatus()) {
      alert("Form OK");
    }
  }

  checkFormStatus() {
    // form validation middleware
    const { email, password } = this.state;
    const emailErr = validateEmail(email);
    const passwordErr = validatePassword(password);

    if (!emailErr.status && !passwordErr.status) {
      return true;
    } else {
      this.setState({
        emailErr,
        passwordErr
      });
      return false;
    }
  }

  render() {
    return (
      <Pane padding={15}>
        <TextInputField
          tabIndex={0}
          required
          isInvalid={this.state.emailErr.status}
          validationMessage={
            this.state.emailErr.status ? this.state.emailErr.value : false
          }
          onChange={this.handleEmailInput}
          value={this.state.email}
          appearance="neutral"
          type="email"
          label="Your email-address"
          inputHeight={36}
          //description="We’ll need your email-address to create an new account"
        />
        <TextInputField
          required
          validationMessage={
            this.state.passwordErr.status ? this.state.passwordErr.value : false
          }
          isInvalid={this.state.passwordErr.status}
          onChange={this.handlePasswordInput}
          value={this.state.password}
          appearance="neutral"
          label="Your Password"
          type="password"
          inputHeight={36}
          //description="Create a secure password to protect your account"
        />
        <Checkbox
          label="Keep me logged in"
          checked={this.state.CheckBoxchecked}
          onChange={this.handleCheckbox}
        />
        <LoginFormButton
          handleSubmit={this.handleSubmit}
        />
      </Pane>
    );
  }
}
export default LoginForm;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

1)検証を使用すると、渡さない限り、LoginFormコンポーネントに起こるのだろうthis.state.passwordthis.state.emailするLoginFormButtonコンポーネント。検証はLoginFormコンポーネントで処理できるため、これを行うことはお勧めしません。

2)HandleSubmit関数はLoginFormButtonLoginFormコンポーネントから小道具としてコンポーネントに渡すことができ、コンポーネント内で直接使用できます。

状態変数の命名規則(camelCases)については、JS標準に従うことをお勧めします。また、特に明記されていない限り、関数を明示的にバインドする必要がないように、矢印関数を使用してください。

LoginFormButton状態を必要としないため、ステートレスコンポーネントに変更しました。その方が良いですし、ReactCommunityが奨励していることです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

React Nativeで1つの関数コンポーネントの状態を別の関数コンポーネントから変更するにはどうすればよいですか?

分類Dev

history.pushを使用しているときに、あるコンポーネントから別のコンポーネントに状態変数を取得するにはどうすればよいですか?

分類Dev

「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

分類Dev

「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

分類Dev

コンポーネントの状態を別のコンポーネントから変更するにはどうすればよいですか?

分類Dev

状態が変化するたびにReactコンポーネントに関数を呼び出させるにはどうすればよいですか?

分類Dev

コンポーネントの状態を変更する関数をテストするにはどうすればよいですか?

分類Dev

あるコンポーネントから別のコンポーネントに状態を渡すにはどうすればよいですか?また、状態を変更するにはどうすればよいですか?

分類Dev

コンポーネントの状態を変更する関数を挿入するにはどうすればよいですか?

分類Dev

反応:子コンポーネント(クラスコンポーネントではなく関数コンポーネント)の状態を親から変更するにはどうすればよいですか?

分類Dev

React関数コンポーネントで配列状態を使用するにはどうすればよいですか?

分類Dev

あるコンポーネントから別のファイルにある他の関数(コンポーネントではない)に状態値にアクセスするにはどうすればよいですか?React js

分類Dev

react-routerを使用してフォームの状態をコンポーネントに保存するにはどうすればよいですか?

分類Dev

小道具を使用して別のコンポーネントでuseState関数を使用するにはどうすればよいですか?

分類Dev

親コンポーネントの状態を子コンポーネントから変更するにはどうすればよいですか?

分類Dev

reactのフックを使用して子コンポーネントから値を取得する親コンポーネントの正しい状態値を更新するにはどうすればよいですか?

分類Dev

Reactコンポーネントをインスタンス化するときに状態を更新する非同期関数を実行するにはどうすればよいですか?

分類Dev

Vueで、あるコンポーネントの関数を別のコンポーネントで使用するにはどうすればよいですか?

分類Dev

反応フック内のすべての状態変数を子コンポーネントに渡すにはどうすればよいですか?

分類Dev

Reactコンポーネントの状態を更新するにはどうすればよいですか?

分類Dev

Angular2あるコンポーネント関数を別のコンポーネントで使用するにはどうすればよいですか

分類Dev

クラスコンポーネントのブール状態で関数を再利用するにはどうすればよいですか?

分類Dev

Reduxの状態変更に基づいてReactコンポーネントのsetState()を作成するにはどうすればよいですか?

分類Dev

引数に基づいてグリマーコンポーネントの初期状態を設定するにはどうすればよいですか?

分類Dev

litElementを使用して別のコンポーネントのコンポーネントの状態を変更するにはどうすればよいですか?

分類Dev

mount()を使用してネストされたコンポーネントの状態を更新するにはどうすればよいですか?

分類Dev

最初のコンポーネントの兄弟ではない別のコンポーネントから関数を実行するにはどうすればよいですか?

分類Dev

Reactでは、親コンポーネントは、子コンポーネントで実行された非同期フェッチ関数の応答からどのように状態を設定できますか?

分類Dev

状態を維持しながらコンポーネントの順序を変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    React Nativeで1つの関数コンポーネントの状態を別の関数コンポーネントから変更するにはどうすればよいですか?

  2. 2

    history.pushを使用しているときに、あるコンポーネントから別のコンポーネントに状態変数を取得するにはどうすればよいですか?

  3. 3

    「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

  4. 4

    「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

  5. 5

    コンポーネントの状態を別のコンポーネントから変更するにはどうすればよいですか?

  6. 6

    状態が変化するたびにReactコンポーネントに関数を呼び出させるにはどうすればよいですか?

  7. 7

    コンポーネントの状態を変更する関数をテストするにはどうすればよいですか?

  8. 8

    あるコンポーネントから別のコンポーネントに状態を渡すにはどうすればよいですか?また、状態を変更するにはどうすればよいですか?

  9. 9

    コンポーネントの状態を変更する関数を挿入するにはどうすればよいですか?

  10. 10

    反応:子コンポーネント(クラスコンポーネントではなく関数コンポーネント)の状態を親から変更するにはどうすればよいですか?

  11. 11

    React関数コンポーネントで配列状態を使用するにはどうすればよいですか?

  12. 12

    あるコンポーネントから別のファイルにある他の関数(コンポーネントではない)に状態値にアクセスするにはどうすればよいですか?React js

  13. 13

    react-routerを使用してフォームの状態をコンポーネントに保存するにはどうすればよいですか?

  14. 14

    小道具を使用して別のコンポーネントでuseState関数を使用するにはどうすればよいですか?

  15. 15

    親コンポーネントの状態を子コンポーネントから変更するにはどうすればよいですか?

  16. 16

    reactのフックを使用して子コンポーネントから値を取得する親コンポーネントの正しい状態値を更新するにはどうすればよいですか?

  17. 17

    Reactコンポーネントをインスタンス化するときに状態を更新する非同期関数を実行するにはどうすればよいですか?

  18. 18

    Vueで、あるコンポーネントの関数を別のコンポーネントで使用するにはどうすればよいですか?

  19. 19

    反応フック内のすべての状態変数を子コンポーネントに渡すにはどうすればよいですか?

  20. 20

    Reactコンポーネントの状態を更新するにはどうすればよいですか?

  21. 21

    Angular2あるコンポーネント関数を別のコンポーネントで使用するにはどうすればよいですか

  22. 22

    クラスコンポーネントのブール状態で関数を再利用するにはどうすればよいですか?

  23. 23

    Reduxの状態変更に基づいてReactコンポーネントのsetState()を作成するにはどうすればよいですか?

  24. 24

    引数に基づいてグリマーコンポーネントの初期状態を設定するにはどうすればよいですか?

  25. 25

    litElementを使用して別のコンポーネントのコンポーネントの状態を変更するにはどうすればよいですか?

  26. 26

    mount()を使用してネストされたコンポーネントの状態を更新するにはどうすればよいですか?

  27. 27

    最初のコンポーネントの兄弟ではない別のコンポーネントから関数を実行するにはどうすればよいですか?

  28. 28

    Reactでは、親コンポーネントは、子コンポーネントで実行された非同期フェッチ関数の応答からどのように状態を設定できますか?

  29. 29

    状態を維持しながらコンポーネントの順序を変更するにはどうすればよいですか?

ホットタグ

アーカイブ