相关疑难解决方法(0)

使用react路由器以编程方式导航

随着react-router我可以使用Link元素创建的原生处理反应路由器链接.

我看到内部调用this.context.transitionTo(...).

我想进行导航,但不是从链接,例如下拉选择.我怎么能在代码中这样做?什么是this.context

我看到了Navigationmixin,但是我可以不用mixin吗?

reactjs react-router

1251
推荐指数
34
解决办法
63万
查看次数

在不使用重定向或链接的情况下更改react-router v4中的URL

我在我的React应用程序中使用react-router v4material-ui.我想知道如果GridTileGridList中点击一下,如何更改URL .

我最初的想法是使用处理程序onTouchTap.但是,我可以看到重定向的唯一方法是使用组件RedirectLink.如何在不渲染这两个组件的情况下更改URL?

我试过this.context.router.push('/foo')但它似乎没有用.

javascript react-router material-ui react-router-v4

32
推荐指数
3
解决办法
7万
查看次数

this.context.router.push不起作用

我正在使用react router 4.0版本.我想在按钮点击时从一个组件导航到另一个组件.我为此实现了反应路由.实现当我点击导航按钮后它给我的错误"遗漏的类型错误:this.context.router.push不是一个函数",并警告"失败上下文类型:无效的上下文router类型的object供给EmpLogin,预计function." 尝试了很多,但无法使它工作.下面是我的组件和路由实现.早些时候我正在使用react router 2.0和browserhistory.push工作.

export class EmpLogin extends React.Component {
  constructor(props) {
super(props);
this.state = {

};
}

loginID(e) {
this.setState({loginID: e.target.value});
}

 Password(e) {
this.setState({password: e.target.value});
}

 navigate(e){
    e.preventDefault();
    this.context.router.push('/EmpDetails');
  }

render() {
  return (
    <div>
    <div >
      <form>
        <input type="text" onChange={this.loginID.bind(this)} />
        <input type="password" onChange={this.Password.bind(this)} />  
        <div>
            {this.props.children}
            <button onClick={this.navigate.bind(this)}>feature</button>
        </div>
      </form>
    </div>
  </div>
);
 }
 }

  EmpLogin.contextTypes = {
  router: React.PropTypes.func.isRequired
 }

 export default EmpLogin;
Run Code Online (Sandbox Code Playgroud)

路由实施 - …

reactjs

9
推荐指数
2
解决办法
1万
查看次数

validateDOMNesting 警告反应

我有一个 React 组件,它整体上是可点击的,但内部也包含按钮。

所以像

<Link to={'/path1'}>
  ...
  <Link to={'path2'} />
  ...
</Link> 
Run Code Online (Sandbox Code Playgroud)

这是我想要的行为,但我收到此警告:

Warning: validateDOMNesting(...): <a> cannot appear as a descendant of <a>. See SearchResult > Link > a > ... > Link > a.
Run Code Online (Sandbox Code Playgroud)

我应该如何认真对待这个问题,解决方法是什么?

reactjs

9
推荐指数
1
解决办法
2万
查看次数

React - 如何在合成事件回收之前触发preventDefault()?

我在 React 组件中有以下函数,该函数在单击链接时运行:

onClick(e, { name }) {
    e.stopPropagation();

    const doIt = await checkSomething();

    if (doIt) {
        e.preventDefault();
        doSomethingElse();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,到了时间,e.preventDefault()合成事件就被回收了。那么,当需要一些逻辑来计算此决定时以及在回收合成事件之前,如何告诉浏览器在点击链接时不要点击该链接?

preventdefault reactjs

6
推荐指数
1
解决办法
4591
查看次数

如何避免重定向两次(react-router-redux)?

我正在使用下一个(5.0.0)版本react-router-redux,它与react-router 4.x兼容。

我的应用程序有两个页面/login/home.

/login如果用户访问不存在的页面,我正在尝试将页面重定向到。这是我的代码

import { Route, Redirect } from 'react-router-dom';
import { ConnectedRouter, routerMiddleware, push } from 'react-router-redux';

ReactDOM.render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <div>
        <Route path="/login" render={() => (
          isSignedIn ? <Redirect to="/home" /> : <Login />
        )}/>

        <Route path="/home" component={Home} />

        <Redirect to="/login" />
      </div>
    </ConnectedRouter>
  </Provider>,
  document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

如果我删除<Redirect to="/login" />并且用户已经登录,当他打开页面时/home,应用程序将直接转到主页,这很好。

但是,使用 时<Redirect to="/login" />,当用户打开页面时/home,应用程序将首先重定向到/login,然后返回到/home

如何避免这种两次重定向?谢谢

javascript reactjs react-router-redux react-router-dom

4
推荐指数
1
解决办法
3133
查看次数

从重定向标签返回 - React Router

目前,我创建了一个搜索栏,并将我的搜索栏链接到我的搜索结果,如下所示:

render() {
if (this.props.itemsFetchSuccess) {
  return (
    <Redirect to={{
      pathname: '/search',
      search: `?item-name=${this.props.searchQuery}`
    }} />
  );
Run Code Online (Sandbox Code Playgroud)

作为我的搜索栏渲染组件的一部分。

GOOGLE CHROME 主 -> 主登陆 -> 搜索结果。

但我怀疑因为我在 React-Router v4 中使用了重定向标签,所以它没有将它添加到浏览器历史堆栈中。如果我从搜索结果页面按回浏览器,它不会返回之前的页面(即主登陆),但会返回主登陆之前的页面。

有没有更好的方法来做到这一点,因为我也尝试使用 Link 标签,但这不起作用,因为它只是生成链接,并且在搜索结果完成后实际上并不重定向。

谢谢!

javascript web reactjs react-router react-redux

4
推荐指数
2
解决办法
4924
查看次数

如何使用React的Router v4 history.push()

注意:我对React和Meteor相当新,所以在回答我的问题时请非常具体.

我正在尝试使用meteor创建一个短信应用程序并做出反应,但是,我使用的教程是使用React v3,我想知道如何在v4中执行相同的操作,即使用browserHistory.push()或browserHistory.replace ()将用户发送到另一个页面.到目前为止,我正在做一个页面,他们可以将自己的名字设置为他们想要的任何内容,然后将它们链接到聊天页面.我知道有很多关于这方面的文章和文档,但它们都是非常复杂的例子.如果可以,你能告诉我最基本的方法,我可以将某人重定向到另一个页面.

SetName.js:

import React from "react";
import { BrowserRouter } from 'react-router-dom'

export default class SetName extends React.Component{
    validateName(e){
        e.preventDefault();
        let name = this.refs.name.value;
        if(name){
            console.log(name);
        }
        this.props.history.push('/asd')
    }
    render(){
        return(
            <div>
                <form onSubmit={this.validateName.bind(this)}>
                    <h1>Enter a  Name</h1>
                    <input ref="name" type="text"/>
                    <button>Go to Chat</button>
                </form>
            </div>
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

main.js

import React from "react";
import ReactDOM from "react-dom";
import {Meteor} from "meteor/meteor";
import {Tracker} from "meteor/tracker";
import { BrowserRouter, Route, Switch } from 'react-router-dom'

import {Texts} from "./../imports/api/Text"; …
Run Code Online (Sandbox Code Playgroud)

meteor reactjs react-router react-router-v4

3
推荐指数
1
解决办法
6297
查看次数

为什么在新的react-router-dom &lt;Redirect /&gt;中不会在setTimout内部触发?

因此,我尝试在注销页面和重定向到主网站页面之间进行一些延迟。但是,我陷入了问题,该反应路由器-DOM <Redirect/>方法并不想火的时候,我们把它里面setTimeout()setInterval()

因此,如果我们将其从计时器中解开,<Redirect/>它将正常工作。

问题是什么,有什么建议吗?

我的代码:

import React, { Component } from 'react';
import { Redirect } from 'react-router-dom';
import axios from 'axios';

class LogoutPage extends Component {
    constructor(props) {
        super(props);
        this.state = {
            navigate: false
        }
    }

    componentDidMount(e) {
        axios.get('http://localhost:3016/logout')
        .then(
            this.setState({
                navigate: true
            }),
        )
        .catch(err => {
            console.error(err);
        });

        if (this.state.navigate) {
            setTimeout(() => {
                return <Redirect to="/employers" />
            }, 2000);
        }
    };

    render() {
        if (this.state.navigate) {
            setTimeout(() => …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-dom react-router-v4 react-router-dom

1
推荐指数
1
解决办法
3140
查看次数