<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RayanBarbara</title>
    <description>The latest articles on DEV Community by RayanBarbara (@rayanbarbara).</description>
    <link>https://dev.to/rayanbarbara</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F503918%2F29458833-5516-4664-b207-aab56c0bf316.jpeg</url>
      <title>DEV Community: RayanBarbara</title>
      <link>https://dev.to/rayanbarbara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rayanbarbara"/>
    <language>en</language>
    <item>
      <title>React dialog: Cannot read property 'state' of undefined</title>
      <dc:creator>RayanBarbara</dc:creator>
      <pubDate>Sun, 01 Nov 2020 19:16:17 +0000</pubDate>
      <link>https://dev.to/rayanbarbara/react-dialog-cannot-read-property-state-of-undefined-4dl9</link>
      <guid>https://dev.to/rayanbarbara/react-dialog-cannot-read-property-state-of-undefined-4dl9</guid>
      <description>&lt;p&gt;For my application I have put in place protected routers where the user needs to log in. Here is the code for the login:&lt;/p&gt;

&lt;p&gt;Login.jsx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Login extends Component {
  constructor(props) {
    super(props);
    this.state = {
      islogged: false,
      loginSettings: {
        lUsername: "",
        lPassword: ""
      }
    };
  };

  handleInput = event =&amp;gt; {
    let loginSettingsNew = { ...this.state.loginSettings };
    let val = event.target.value;
    loginSettingsNew[event.target.name] = val;
    this.setState({
      loginSettings: loginSettingsNew
    });
  };

  login = event =&amp;gt; {
    let lUsername = this.state.loginSettings.lUsername;
    let lPassword = this.state.loginSettings.lPassword;
    if (lUsername === "admin" &amp;amp;&amp;amp; lPassword === "password") {
      localStorage.setItem("token", "T");
      this.setState({
        islogged: true
      });
    } else {
      console.log("Erreur");
    }
    event.preventDefault();
  };

  render() {
    if (localStorage.getItem("token")) {
      return &amp;lt;Redirect to="/" /&amp;gt;;
    }
    return (
      &amp;lt;div className="Login"&amp;gt;
        &amp;lt;form onSubmit={this.login} className="loginForm"&amp;gt;
          &amp;lt;label&amp;gt;
            &amp;lt;span&amp;gt;Username&amp;lt;/span&amp;gt;
            &amp;lt;input
              name="lUsername"
              type="text"
              placeholder="Enter your username"
              minLength="5"
              required
              onChange={this.handleInput} /&amp;gt;
          &amp;lt;/label&amp;gt;
          &amp;lt;label&amp;gt;
            &amp;lt;span&amp;gt;Password&amp;lt;/span&amp;gt;
            &amp;lt;input
              name="lPassword"
              type="password"
              placeholder="Enter your password"
              minLength="5"
              required
              onChange={this.handleInput}
            /&amp;gt;
          &amp;lt;/label&amp;gt;
          &amp;lt;button type="submit" value="submit"&amp;gt;Login&amp;lt;/button&amp;gt;
        &amp;lt;/form&amp;gt;
      &amp;lt;/div&amp;gt;
    );
  }
}

export default Login;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now I'm trying to replace this form by a material UI form dialog. Basically the user will be sent to the same component (login.jsx) when he starts the application. But the form will only appear when the user open the dialog. To do that I have made the following changes.&lt;/p&gt;

&lt;p&gt;Dialog.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export default function FormDialog() {
    const [open, setOpen] = React.useState(false);

    const handleClickOpen = () =&amp;gt; {
        setOpen(true);
    };

    const handleClose = () =&amp;gt; {
        setOpen(false);
    };

    return (
        &amp;lt;div&amp;gt;
            &amp;lt;Button onClick={handleClickOpen}&amp;gt;
                Open form dialog
      &amp;lt;/Button&amp;gt;
            &amp;lt;Dialog open={open} onClose={handleClose}&amp;gt;
                &amp;lt;DialogTitle&amp;gt;Login&amp;lt;/DialogTitle&amp;gt;
                &amp;lt;DialogContent&amp;gt;
                    &amp;lt;label&amp;gt;
                        &amp;lt;span&amp;gt;Username&amp;lt;/span&amp;gt;
                        &amp;lt;input
                            name="lUsername"
                            type="text"
                            placeholder="Enter your username"
                            minLength="5"
                            required
                            onChange={handleInput} /&amp;gt;
                    &amp;lt;/label&amp;gt;
                    &amp;lt;label&amp;gt;
                        &amp;lt;span&amp;gt;Password&amp;lt;/span&amp;gt;
                        &amp;lt;input
                            name="lPassword"
                            type="password"
                            placeholder="Enter your password"
                            minLength="5"
                            required
                            onChange={handleInput}
                        /&amp;gt;
                    &amp;lt;/label&amp;gt;
                &amp;lt;/DialogContent&amp;gt;
                &amp;lt;DialogActions&amp;gt;
                    &amp;lt;Button onClick={handleClose} color="primary"&amp;gt;
                        Cancel
          &amp;lt;/Button&amp;gt;
                    &amp;lt;Button onClick={login} color="primary"&amp;gt;
                        Login
          &amp;lt;/Button&amp;gt;
                &amp;lt;/DialogActions&amp;gt;
            &amp;lt;/Dialog&amp;gt;
        &amp;lt;/div&amp;gt;
    );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Login.jsx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Login extends Component {
  constructor(props) {
    super(props);
this.handleInput = this.handleInput.bind(this);
this.login = this.login.bind(this);
    this.state = {
      islogged: false,
      loginSettings: {
        lUsername: "",
        lPassword: ""
      }
    };
  };

  handleInput = event =&amp;gt; {
    let loginSettingsNew = { ...this.state.loginSettings };
    let val = event.target.value;
    loginSettingsNew[event.target.name] = val;
    this.setState({
      loginSettings: loginSettingsNew
    });
  };

  login = event =&amp;gt; {
    let lUsername = this.state.loginSettings.lUsername;
    let lPassword = this.state.loginSettings.lPassword;
    if (lUsername === "admin" &amp;amp;&amp;amp; lPassword === "password") {
      localStorage.setItem("token", "T");
      this.setState({
        islogged: true
      });
    } else {
      console.log("Erreur");
    }
    event.preventDefault();
  };

  render() {
    if (localStorage.getItem("token")) {
      return &amp;lt;Redirect to="/" /&amp;gt;;
    }
    return (
      &amp;lt;div className="Login"&amp;gt;
        &amp;lt;Dialog /&amp;gt;
      &amp;lt;/div&amp;gt;
    );
  }
}

export default Login;

export const login = event =&amp;gt; {
  let lUsername = this.state.loginSettings.lUsername;
  let lPassword = this.state.loginSettings.lPassword;
  if (lUsername === "admin" &amp;amp;&amp;amp; lPassword === "password") {
    localStorage.setItem("token", "T");
    this.setState({
      islogged: true
    });
  } else {
    console.log("Erreur");
  }
  event.preventDefault();
};

export const handleInput = event =&amp;gt; {
  let loginSettingsNew = { ...this.state.loginSettings };
  let val = event.target.value;
  loginSettingsNew[event.target.name] = val;
  this.setState({
    loginSettings: loginSettingsNew
  });
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dialog button and the form dialog appear, but I have the following error when I open the dialog:&lt;/p&gt;

&lt;p&gt;Type error: Cannot read property 'state' of undefined&lt;/p&gt;

&lt;p&gt;Most similar questions on StackOverflow say to bind the functions, but it didn't work :/. So I would like to ask some help please.&lt;/p&gt;

&lt;p&gt;I thank in advance anybody who will take the time to help me .&lt;/p&gt;

</description>
      <category>react</category>
    </item>
  </channel>
</rss>
