【问题标题】:React component not rendering with React RouterReact 组件不使用 React Router 渲染
【发布时间】:2018-01-07 16:44:14
【问题描述】:

我遇到了组件在遵循其路线后未呈现的问题。路由在父组件Drawings 中创建,并向Drawing 组件发送几个道具。

当我单击链接时,我会到达正确的路径,例如 /drawing/20170724,并且我在 render 函数中的日志语句会运行。我也得到了道具,到目前为止一切都很好。但是,返回没有发生,所以我需要的 HTML 不可用。

这里是Drawings 创建路由和链接的地方:

import React, { Component } from "react";
import { Route, Link } from "react-router-dom";
import AnimatedWrapper from "../modules/AnimatedWrapper";

import Drawing from '../components/Drawing';

class DrawingsComponent extends Component {
  render() {
    const drawings = this.props.drawings;
    const drawingsMap = this.props.drawingsMap;

    return(
      <div>
        <div className="page">
          <div className="drawings-list">
            {
              drawings.map((drawing) => {
               return(
                <Link to={`/drawing/${drawing.date}`} key={drawing.date}>
                  <div className="drawing-thumb">
                    <h2>{drawing.date}</h2>
                  </div>
                </Link>
                )
              })
            }
          </div>
          {
          Object.keys(drawingsMap).map((d, i) => {
            return <Route path={`/drawing/${drawings[i].date}`} render={(props) => (<Drawing drawingPkg={drawingsMap[d]} drawingInfo={drawings[i]} {...props} />)} key={`${drawings[i].date}`}/>
          })}
        </div>
      </div>
    )
  }
}

const Drawings = AnimatedWrapper(DrawingsComponent);
export default Drawings;

这里是Drawing:

import React, { Component } from 'react';
import AnimatedWrapper from "../modules/AnimatedWrapper";

class DrawingComponent extends Component {
    render() {
        const drawing = this.props.drawingPkg;
        const drawingInfo = this.props.drawingInfo;

        console.log('gonna draw now');

        return(
            <div className="drawing">
                <h2 className="drawing-title">{drawingInfo.title}</h2>
                <canvas></canvas>
            </div>
        )
    }
}

const Drawing = AnimatedWrapper(DrawingComponent);
export default Drawing;

我不知道为什么绘图组件没有返回。

【问题讨论】:

  • 控制台错误会帮助其他人更快地了解您的情况吗?请帮忙提供。
  • 对不起,没有控制台错误——一切似乎都运行良好。我在控制台中单击DrawingComponent 中的链接和我的日志语句“现在开始绘制”,但返回语句似乎从未运行,因为应该返回的 HTML 不存在于 DOM 中。

标签: javascript reactjs react-router-v4


【解决方案1】:

你做错了。单击链接时,您会更改 URL。然后你必须给路由配置,告诉反应路由器当 URL 改变时要渲染哪个组件。在您的 index.js 文件中应该是这样的。

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import promise from 'redux-promise';

import reducers from './reducers';
import Drawing './components/drawing_component';


const createStoreWithMiddleware = applyMiddleware(promise)(createStore);

ReactDOM.render(
  <Provider store={createStoreWithMiddleware(reducers)}>
    <BrowserRouter>
      <div>
        <Switch>
            <Route path="/drawings/:date" component={Drawing} />
            <Route path="/" component={IndexComponent} />
        </Switch>
      </div>
    </BrowserRouter>
  </Provider>
  , document.querySelector('.container'));

我认为这里有问题的是您的路线配置。我从未见过像你这样给出路由配置。

然后编写一个单独的Drawing 组件来呈现给定的drawing 实例。

通过此更改,您的链接应该是这样的。

<Link to={`/drawing/${drawing.date}`}>
  {drawing.date}
</Link>

底线是这样的。在这里,您提供了一些带有超链接的文本。单击此路由器后,将更改 URL,就像您现在的情况一样。然后它使用路由器配置来渲染相关组件。

【讨论】:

  • 谢谢!这有助于 - 工作,并且现在组织得更好。 :)
猜你喜欢
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多