Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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 Router-Pass方法_Javascript_Reactjs_React Router - Fatal编程技术网

Javascript 对子组件使用React Router-Pass方法

Javascript 对子组件使用React Router-Pass方法,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我在一个名为“Create”的组件中嵌套了一个按钮,该按钮必须触发状态更改,从而更改app.js中的状态并呈现一个新视图 我似乎无法将方法changeHPage从app.js传递到Create组件。我正在使用React Router,通常我只需编写将方法传递给其子组件,并使用this.props.changeHpage调用它,但在使用React Router时,我无法通过此方法传递props 任何关于如何使用React路由器将方法传递给子组件的帮助都将不胜感激。我的代码可以在下面找到 app.j

我在一个名为“Create”的组件中嵌套了一个按钮,该按钮必须触发状态更改,从而更改app.js中的状态并呈现一个新视图

我似乎无法将方法changeHPage从app.js传递到Create组件。我正在使用React Router,通常我只需编写
将方法传递给其子组件,并使用this.props.changeHpage调用它,但在使用React Router时,我无法通过此方法传递props

任何关于如何使用React路由器将方法传递给子组件的帮助都将不胜感激。我的代码可以在下面找到

app.js:

    /* STRICT MODE: See `../../server.js` */
'use strict';

/* GLOBAL REACT REQUIRES */
// React.js
const React = require('react');
// React-DOM for HTML rendering
const ReactDOM = require('react-dom');
// React router for dynamic pathing. Has several component features that need to be required to use.
const ReactRouter = require('react-router');
// 4 components pulled from ReactRouter:
const Router = ReactRouter.Router;
const Route = ReactRouter.Route;
const Navigation = ReactRouter.Navigation;
const Link = ReactRouter.Link;
const browserHistory = ReactRouter.browserHistory;

/* Relative paths to external components */
const auth = require('./helpers/auth.js');
const requireAuth = require('./helpers/requireauth.js');
const About = require('./components/about.js');
const Login = require('./components/login.js');
const Logout = require('./components/logout.js');
const Signup = require('./components/signup.js');
const Header = require('./components/header.js');
const Create = require('./components/create.js');
const NotFound = require('./components/notfound.js');
const Veri = require('./components/veri.js');


/* React App Creation */
const App = React.createClass({
  // Declares the initial state when app is loaded
  getInitialState : function() {
    return {
      loggedIn: auth.loggedIn(),
      change: true,
      phoneNumber: {}
    }
  },

  // Updates state when login is trigger
  updateAuth : function(loggedIn) {
    this.setState({
      loggedIn: loggedIn
    })
  },



  changeHPage: function() {
    this.state.change = !this.state.change;
    this.setState({
      change: !this.state.change
    });
    console.log("changePage On HomePage Pressed");
    this.context.router.push('/')
  },




  // Login even triggered and sent to back-end
  componentWillMount : function() {
    auth.onChange = this.updateAuth
    auth.login()
  },


  addNumber: function(phonenumber){

    this.state.phonenumber = phonenumber
    this.setState()

  },


  // Renders App and all of its children
  render : function() {

    <div className="Detail">
        {this.props.children && React.cloneElement(this.props.children, {
          changeHPage: this.changeHPage
        })}
      </div>

    var firstView;


      {if(this.state.change) {
        firstView = <div>
      <div className="row">
      <Veri> This is a child of Veri </Veri>
      <Header details="Hi, I'm Plantee"/>
        <section className="col s12">
        <ul>
            {this.state.loggedIn ? (
              <div>
                <li><Link to="/logout">Log out</Link> </li>
                <li><Link to="/create">Create Your Plantee</Link></li>
                {/*<Create> <Veri/> </Create>*/}
             </div>
            ) : (
              <div>
                <li><Link to="/login">Log In</Link></li>
                <li><Link to="/signup">Sign up</Link></li>
             </div>
            )}
          <li><Link to="/about">About</Link></li>
        </ul>
        {this.props.children || <p>You are {!this.state.loggedIn && 'not'} logged in.</p>}
        </section>
      </div> </div>

    } else {
      firstView= <div>'Hello'</div>
    }
      return React.cloneElement(
        firstView,
        {switch: this.changeHPage}
      )

  }}

})





/* React router initialization */
var routes = (
  <Router history={browserHistory}>
    <Route path="/" component={App} >
    <Route path="header" component={Header} />
      <Route path="login" component={Login} />
      <Route path="logout" component={Logout} />
      <Route path="create" component={Create} change={App.changeHPage} />
      <Route path="signup" component={Signup} />
      <Route path="about" component={About} />
      <Route path="very" component={Veri} />
    </Route>
    <Route path="*" component={NotFound} />
  </Router>
)

ReactDOM.render(routes, document.querySelector('#container'))
/*严格模式:请参阅`..//server.js`*/
"严格使用",;
/*全球反应需要*/
//React.js
const React=require('React');
//React-DOM用于HTML呈现
const ReactDOM=require('react-dom');
//反应路由器的动态路径。具有多个需要使用的组件功能。
const ReactRouter=require('react-router');
//从路由器拉出的4个组件:
const Router=ReactRouter.Router;
const Route=ReactRouter.Route;
const Navigation=ReactRouter.Navigation;
const Link=ReactRouter.Link;
const browserHistory=ReactRouter.browserHistory;
/*到外部组件的相对路径*/
const auth=require('./helpers/auth.js');
const requireAuth=require('./helpers/requireAuth.js');
const About=require('./components/About.js');
const Login=require('./components/Login.js');
const Logout=require('./components/Logout.js');
const Signup=require('./components/Signup.js');
const Header=require('./components/Header.js');
const Create=require('./components/Create.js');
const NotFound=require('./components/NotFound.js');
const Veri=require('./components/Veri.js');
/*React应用程序创建*/
const App=React.createClass({
//声明加载应用程序时的初始状态
getInitialState:函数(){
返回{
loggedIn:auth.loggedIn(),
变化:是的,
电话号码:{}
}
},
//在触发登录时更新状态
updateAuth:函数(loggedIn){
这是我的国家({
loggedIn:loggedIn
})
},
changeHPage:function(){
this.state.change=!this.state.change;
这是我的国家({
更改:!this.state.change
});
console.log(“主页上的更改页按下”);
this.context.router.push(“/”)
},
//登录甚至被触发并发送到后端
componentWillMount:function(){
auth.onChange=this.updateAuth
auth.login()
},
addNumber:函数(电话号码){
this.state.phonenumber=电话号码
this.setState()
},
//呈现应用程序及其所有子项
render:function(){
{this.props.children&&React.cloneElement(this.props.children{
changeHPage:this.changeHPage
})}
var firstView;
{if(this.state.change){
第一视图=
这是威利的孩子
    {this.state.loggedIn(
  • 注销
  • 创建您的Plantee
  • {/* */} ) : (
  • 登录
  • 报名
  • )}
  • 关于
{this.props.children | | |您已{!this.state.loggedIn&“not”}登录。

} }否则{ firstView='你好' } 返回。克隆元素( 第一视图, {switch:this.changeHPage} ) }} }) /*反应路由器初始化*/ 变量路由=( ) render(路由、文档、查询选择器(“#容器”))
create.js:

const React = require('react');
const ReactDOM = require('react-dom');
const auth = require('../helpers/auth')
const Veri = require('./veri.js');
const App = require('../app.js');

const ReactRouter = require('react-router');
// 4 components pulled from ReactRouter:
const Router = ReactRouter.Router;
const Route = ReactRouter.Route;
const Navigation = ReactRouter.Navigation;
const Link = ReactRouter.Link;
const browserHistory = ReactRouter.browserHistory;


const Create = React.createClass({

  getInitialState: function(){
    return {checked: false}
  },
  handleClick: function(event) {
    event.preventDefault();
    this.setState({checked: !this.state.checked})

    let phonenumber = {
      phonenumber: this.refs.phonenumber.value
    }

  },

  showVerification : function(event) {
    event.preventDefault();

  },


  remove(e) {
    e.preventDefault();
    console.log(this.props);
  },

  render : function(){

    var msg;
    {if(this.state.checked) {
      msg = <div><Veri text={'Your verification code is '}  code={'code'}/> <form className="gotIt" onSubmit={this.props.changeHpage} >
      <input type="Submit" value="Got It" />
       </form> </div>
    }
    else {
      msg = <Veri details={''}/>
    }}

    return (

      <div>
      <h1>Create Your Plantee</h1>

      <h2>Please Enter Your Phone Number</h2>
      <p>You will recieve a phone call in order to verify that you are capable of raising a plantee</p>



      <form className="telephoneNumber" onSubmit={this.handleClick}>
         <input id="phonenumber" ref="phonenumber" type="tel" />
         <input type="Submit" />
       </form>
       <div> {msg} </div>

       <h3>{this.props.children}</h3>


       </div>
    )
  }
})

module.exports = Create;
const React=require('React');
const ReactDOM=require('react-dom');
const auth=require(“../helpers/auth”)
const Veri=require('./Veri.js');
const App=require('../App.js');
const ReactRouter=require('react-router');
//从路由器拉出的4个组件:
const Router=ReactRouter.Router;
const Route=ReactRouter.Route;
const Navigation=ReactRouter.Navigation;
const Link=ReactRouter.Link;
const browserHistory=ReactRouter.browserHistory;
const Create=React.createClass({
getInitialState:函数(){
返回{checked:false}
},
handleClick:函数(事件){
event.preventDefault();
this.setState({checked:!this.state.checked})
让电话号码={
phonenumber:this.refs.phonenumber.value
}
},
showVerification:功能(事件){
event.preventDefault();
},
删除(e){
e、 预防默认值();
console.log(this.props);
},
render:function(){
var-msg;
{if(this.state.checked){
味精=
}
否则{
味精=
}}
返回(
创建您的Plantee
请输入您的电话号码
您将接到一个电话,以验证您是否有能力饲养一个种植户

{msg} {this.props.children} ) } }) module.exports=创建;
请查看以下github问题: 这是直接取自:ryanflorence

通常,如果跨越管线边界传递道具,则父管线确切地知道其渲染的内容:

<Route path="/inbox" component={Inbox}>
  <Route path=":messageId" component={Message}/>
  <IndexRoute component={InboxStats}/>
</Route>

const Inbox = React.createClass({
  render() {
    return (
      <div>
        {/* this is only ever `Message`, except the weird case
          of `InboxStats` which doesn't need the prop */}
        {React.cloneElement(this.props.children, {
          onDelete: this.handleMessageDelete
        })}
      </div>
    )
  }
})

const Inbox=React.createClass({
render(){
返回(
{/*这是唯一的“消息”,除了奇怪的情况
不需要属性*/}
{React.cloneElement(this.props.children{
onDelete:this.handleMessageDelete
})}
)
}
})
相反,使用无组件的路线,只做“正常”的反应

<Route path="/inbox" component={Inbox}>
  {/* no more `Message` */}
  <Route path=":messageId"/>
</Route>

const Inbox = React.createClass({
  render() {
    const { messageId } = this.props.params
    return (
      <div>
        {messageId ? (
          <Message onDelete={this.handleMessageDelete}/>
        ) : (
          <InboxStats/>
        )}
      </div>
    )
  }
})

{/*不再有`消息'*/}
const Inbox=React.createClass({
render(){
const{messageId}=this.props.params
返回(
{messageId(
) : (
)}
)
}
})