javascript - 在react-router中创建动态链接列表

标签 javascript reactjs react-router jsx react-router-v4

我正在学习react-router,我需要解决以下问题的帮助:

我正在迭代一个名为 nameArr 的字符串数组。我想使用react-router 创建字符串的可点击链接列表,以便每个链接都可以通过route.js 中定义的路线进行导航。

数组 nameArr 是根据服务器创建的响应填充的。

以下代码重点介绍创建列表并将其应用到 JSX。

var React = require('react');
var Router = require('react-router');
var createReactClass = require('create-react-class');
var Link = Router.Link;  
var request = require('superagent'); //Superagent is an AJAX API used in Node.

var classComp = createReactClass({

request.post('/getdata')
        .end(function (err, res) {
            if (err || !res.ok) {
                console.log('Oh no! err');
            } else {
                var response = JSON.parse(res.text);
                var i;
                var pathArr = [];
                var nameArr = [];

                for (i = 0; i < response.length; i++) {
                    pathArr[i] = response[i].videourl;
                    nameArr[i] = response[i].name;
                }
var displayItem = "<div className=\"container\">";

                for (var m in nameArr) {
                  displayItem += "<div class='text-center'><Link to='play'><h3>" + nameArr[m].toString() + "</h3></Link></div>";
                }

                displayItem += "</div>";
                document.getElementById("vdlist").innerHTML = displayItem;
}

render: function () {
    return (
        <div className="container center-block vlsection1">
            {this.display()}
            <h1 className="text-center">Videos</h1>
            <div id="vdlist">

            </div>
        </div>
    );
}
});

当我运行应用程序时,会生成列表,但未显示链接。当我单击链接时,不会发生任何操作。请建议我如何以更好的方式解决这个问题。

非常感谢!

最佳答案

正如 Rajit 的评论中已经提到的,您尝试在渲染函数中访问 dom 元素。这绝不是一个好主意,也不应该这样做。

在 React 中直接访问 dom 也不是正确的方式,因为你会失去一些强大的 React 工具,比如虚拟 dom。

更好的方法是使用 JSX。我所说的 JSX 是指真正的 JSX。 “看起来”像 JSX 的字符串和实际的 JSX 之间存在差异。您尝试做的是创建一个内部包含 JSX 的字符串。然后,使用innerHTML 属性将此字符串添加到dom 中。然而,您的 JSX 不会真正被当作 JSX 来处理。它只会像 HTML 一样处理它 - 并且 HTML 中没有 元素。这就是您看不到这些项目的原因。

而是这样做:

import React, { Component } from 'react';
import { Link } from 'react-router-dom'; // You need to use react-router-dom here

class VideoList extends Component {
  constructor(props) {
    super(props);
    this.nameArr = ['name1', 'name2'];
  }

  getVideos() {
    // This creates a JSX element for every name in the list.
    return this.nameArr.map(name => <div className="text-center"><Link to="play"><h3>{name}</h3></Link></div>);
  }

  render() {
    return (
      <div className="container center-block vlsection1">
        <h1 className="text-center">Videos</h1>
        {this.getVideos()}
    </div>
    );
  }
}

关于javascript - 在react-router中创建动态链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49361889/

相关文章:

javascript - 从两个数组生成 JSON

javascript - clearInterval 在 React 功能组件中不起作用

reactjs - React Router 6.3.0 渲染组件两次

javascript - ReactJS 根据滚动到具有动态高度的部分更改导航栏颜色

javascript - 我可以通过 https 请求在请求负载中看到清晰的密码,这正常吗?

JavaScript 切换 Material Design Lite 开关

javascript - 未捕获的语法错误 : Unexpected token : for a valid JSON

javascript - 使用 Redux-Form 进行搜索过滤器,我如何才能 "reset"并重新提交表单?

javascript - 使用 enzyme 进行浅层渲染 : actual and expected output does not match

reactjs - React 路由器匹配失败