Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用React和Material UI创建动态标题UI_Javascript_Jquery_Reactjs_Material Ui - Fatal编程技术网

Javascript 使用React和Material UI创建动态标题UI

Javascript 使用React和Material UI创建动态标题UI,javascript,jquery,reactjs,material-ui,Javascript,Jquery,Reactjs,Material Ui,在我的header.jsx文件中,我有: // Default Import Statements go here var Login = require(login.jsx) const HeaderComponent = React.createClass({ getInitialState () { return { loggedIn: false, }; }, render() { return ( <Toolbar&g

在我的header.jsx文件中,我有:

// Default Import Statements go here
var Login = require(login.jsx)
const HeaderComponent = React.createClass({

  getInitialState () {
    return {
      loggedIn: false,
    };
  },
  render() {
    return (
      <Toolbar>
        <ToolbarGroup key={1} float="right">
          <Login />
        </ToolbarGroup>
      </Toolbar>
    );
  }
});

module.exports = HeaderComponent;
//默认导入语句位于此处
var Login=require(Login.jsx)
const HeaderComponent=React.createClass({
getInitialState(){
返回{
洛格丁:错,
};
},
render(){
返回(
);
}
});
module.exports=头组件;
在我的登录组件(Login.jsx)中:

//默认导入语句
var LoginDialog=React.createClass({
render(){
返回(
);
},
_submitTouchTap:函数(){
var primaryEmail=this.refs.email.getValue();
var password=this.refs.password.getValue();
风险值数据={
primaryEmail:primaryEmail,
密码:密码
};
$.ajax({
url:“/login”,
数据类型:“json”,
键入:“post”,
数据:数据,
成功:功能(数据){
控制台日志(数据);
}.绑定(此),
错误:函数(xhr、状态、错误){
this.transitiono('/login');
}.绑定(此)
});
this.refs.loginDialog.setState({open:false});
},
_cancelTouchTap:函数(){
this.refs.loginDialog.setState({open:false});
},
_handleTouchTap(){
this.refs.loginDialog.setState({open:true});
}
});
module.exports=LoginDialog;
当用户登录时,一旦ajax调用返回成功,我想将标题的
loggedIn
状态切换为true。但是,我不太确定如何将数据从单独的文件(child login.jsx)传递到父文件(header.jsx)中。有人知道我如何做到这一点,以便为标题创建动态UI吗


一旦用户登录到loggedIn的状态,header组件应返回true。一旦这是真的,我将显示一个不同的标题比目前显示的

您可以使用回调:

var Login = require(login.jsx)
const HeaderComponent = React.createClass({

  getInitialState () {
    return {
      loggedIn: false,
    };
  },
  render() {
    return (
      <Toolbar>
        <ToolbarGroup key={1} float="right">
          <Login onLoggedIn={this._handleLogIn}/>
        </ToolbarGroup>
      </Toolbar>
    );
  },
  _handleLogIn: function (data) {
    console.log(data);
    this.setState({loggedIn: true});
  }
});

module.exports = HeaderComponent;

var LoginDialog = React.createClass({

  render() {
    return (
      <div>
        <Dialog
          title="Login"
          ref="loginDialog"
          autoScrollBodyContent = {true}
          onRequestClose={this._cancelTouchTap}
          open={this.state.open}>
          <form action="/login" method="post" autoComplete="off">
            <div>
              <TextField hintText="Email Field" ref = "email" />
            </div>
            <div>
              <TextField hintText="Password" type="password" ref = "password"/>
            </div>
            <div>
              <RaisedButton label="Submit" onTouchTap={this._submitTouchTap}/>
              <RaisedButton label="Cancel" onTouchTap={this._cancelTouchTap}/>
            </div>
          </form>
        </Dialog>

        <FlatButton label="Login" style={loginSpacing} primary={true} onTouchTap={this._handleTouchTap} />

      </div>
    );
  },

  _submitTouchTap: function(){
    var primaryEmail = this.refs.email.getValue();
    var password = this.refs.password.getValue();
    var data = {
      primaryEmail: primaryEmail,
      password: password
    };
    $.ajax({
      url: '/login',
      dataType: 'json',
      type: 'post',
      data: data,
      success: function(data) {
        console.log(data);
        this.props.onLoggedIn(data);
      }.bind(this),
      error: function(xhr, status, err) {
        this.transitionTo('/login'); 
      }.bind(this)
    });
    this.refs.loginDialog.setState({open: false});
  },

  _cancelTouchTap: function(){
    this.refs.loginDialog.setState({open: false});
  },

  _handleTouchTap() {
    this.refs.loginDialog.setState({open: true});
  }
});
module.exports = LoginDialog;
var Login=require(Login.jsx)
const HeaderComponent=React.createClass({
getInitialState(){
返回{
洛格丁:错,
};
},
render(){
返回(
);
},
_handleLogIn:函数(数据){
控制台日志(数据);
this.setState({loggedIn:true});
}
});
module.exports=头组件;
var LoginDialog=React.createClass({
render(){
返回(
);
},
_submitTouchTap:函数(){
var primaryEmail=this.refs.email.getValue();
var password=this.refs.password.getValue();
风险值数据={
primaryEmail:primaryEmail,
密码:密码
};
$.ajax({
url:“/login”,
数据类型:“json”,
键入:“post”,
数据:数据,
成功:功能(数据){
控制台日志(数据);
this.props.onLoggedIn(数据);
}.绑定(此),
错误:函数(xhr、状态、错误){
this.transitiono('/login');
}.绑定(此)
});
this.refs.loginDialog.setState({open:false});
},
_cancelTouchTap:函数(){
this.refs.loginDialog.setState({open:false});
},
_handleTouchTap(){
this.refs.loginDialog.setState({open:true});
}
});
module.exports=LoginDialog;

您可以使用回调:

var Login = require(login.jsx)
const HeaderComponent = React.createClass({

  getInitialState () {
    return {
      loggedIn: false,
    };
  },
  render() {
    return (
      <Toolbar>
        <ToolbarGroup key={1} float="right">
          <Login onLoggedIn={this._handleLogIn}/>
        </ToolbarGroup>
      </Toolbar>
    );
  },
  _handleLogIn: function (data) {
    console.log(data);
    this.setState({loggedIn: true});
  }
});

module.exports = HeaderComponent;

var LoginDialog = React.createClass({

  render() {
    return (
      <div>
        <Dialog
          title="Login"
          ref="loginDialog"
          autoScrollBodyContent = {true}
          onRequestClose={this._cancelTouchTap}
          open={this.state.open}>
          <form action="/login" method="post" autoComplete="off">
            <div>
              <TextField hintText="Email Field" ref = "email" />
            </div>
            <div>
              <TextField hintText="Password" type="password" ref = "password"/>
            </div>
            <div>
              <RaisedButton label="Submit" onTouchTap={this._submitTouchTap}/>
              <RaisedButton label="Cancel" onTouchTap={this._cancelTouchTap}/>
            </div>
          </form>
        </Dialog>

        <FlatButton label="Login" style={loginSpacing} primary={true} onTouchTap={this._handleTouchTap} />

      </div>
    );
  },

  _submitTouchTap: function(){
    var primaryEmail = this.refs.email.getValue();
    var password = this.refs.password.getValue();
    var data = {
      primaryEmail: primaryEmail,
      password: password
    };
    $.ajax({
      url: '/login',
      dataType: 'json',
      type: 'post',
      data: data,
      success: function(data) {
        console.log(data);
        this.props.onLoggedIn(data);
      }.bind(this),
      error: function(xhr, status, err) {
        this.transitionTo('/login'); 
      }.bind(this)
    });
    this.refs.loginDialog.setState({open: false});
  },

  _cancelTouchTap: function(){
    this.refs.loginDialog.setState({open: false});
  },

  _handleTouchTap() {
    this.refs.loginDialog.setState({open: true});
  }
});
module.exports = LoginDialog;
var Login=require(Login.jsx)
const HeaderComponent=React.createClass({
getInitialState(){
返回{
洛格丁:错,
};
},
render(){
返回(
);
},
_handleLogIn:函数(数据){
控制台日志(数据);
this.setState({loggedIn:true});
}
});
module.exports=头组件;
var LoginDialog=React.createClass({
render(){
返回(
);
},
_submitTouchTap:函数(){
var primaryEmail=this.refs.email.getValue();
var password=this.refs.password.getValue();
风险值数据={
primaryEmail:primaryEmail,
密码:密码
};
$.ajax({
url:“/login”,
数据类型:“json”,
键入:“post”,
数据:数据,
成功:功能(数据){
控制台日志(数据);
this.props.onLoggedIn(数据);
}.绑定(此),
错误:函数(xhr、状态、错误){
this.transitiono('/login');
}.绑定(此)
});
this.refs.loginDialog.setState({open:false});
},
_cancelTouchTap:函数(){
this.refs.loginDialog.setState({open:false});
},
_handleTouchTap(){
this.refs.loginDialog.setState({open:true});
}
});
module.exports=LoginDialog;

您可以使用从父组件传递到子组件的回调函数,并将数据作为该回调函数的参数发送。对吗?您可以使用从父组件传递到子组件的回调,并将数据作为此回调的参数发送。对吗?是的,但是如果它们在不同的文件中,我仍然可以使用回调吗?是的,它们在不同的文件中没有问题。很酷,谢谢,我想我明白了,你知道当
loggedIn
的状态设置为true时,我如何更改头组件吗?基本上,我可以如何将
的当前内容切换到其他内容?每次更改状态时,都会调用渲染函数。因此,由于您的状态中有一个布尔值,您可能希望执行某种条件渲染。看:是的,但是如果它们在不同的文件中,我还可以使用回调吗?是的,它们在不同的文件中没有问题。很酷,谢谢,我想我明白了,你知道我怎么做吗