如何禁用 Link/href 所做的 css 更改

Posted

技术标签:

【中文标题】如何禁用 Link/href 所做的 css 更改【英文标题】:How to disable the css changes made by Link/href 【发布时间】:2020-11-21 08:04:32 【问题描述】:

目前有一个包含一些列的表,如下所示: 如果想查看某公司的详细信息,必须点击该行右端的箭头。

当我想让整行可点击时出现问题,即使没有添加任何 css 类,它也会破坏页面的设计。

这是只有右端箭头可点击时的代码:

import React from 'react';
import  Table, Image, Icon  from 'semantic-ui-react';
import  Link  from 'react-router-dom';

export default class GenericTable extends React.PureComponent 
  constructor(props) 
    super(props);
  

  render() 
    const  headers, emptyFirstHeader, rows, entityName, idList  = this.props;

    return (
      <Table>
        <Table.Header>
          <Table.Row>
            emptyFirstHeader && <Table.HeaderCell />
            headers.map(header => (
              <Table.HeaderCell key=headers.indexOf(header)>
                header
              </Table.HeaderCell>
            ))
            <Table.HeaderCell textAlign="right" />
          </Table.Row>
        </Table.Header>

        <Table.Body>
          rows.map((row, rowIndex) => (
            <Table.Row key=idList && idList[rowIndex]>
              emptyFirstHeader && (
                <Table.Cell>
                  <Image src=row.cells[0] />
                </Table.Cell>
              )

              
                (emptyFirstHeader ? row.cells.shift() : row,
                row.cells.map((cell, cellIndex) => 
                  if (cell === undefined) 
                    return null;
                  
                  return (
                    <Table.Cell
                      key=
                        idList && `$idList[rowIndex] $headers[cellIndex]`
                      >
                      cell
                    </Table.Cell>
                  );
                ))
              

              <Table.Cell>
                <Link
                  to=
                    entityName && `/$entityName/$idList[rows.indexOf(row)]`
                  >
                  <Icon name="chevron right" />
                </Link>
              </Table.Cell>
            </Table.Row>
          ))
        </Table.Body>
      </Table>
    );
  

当我将每个 &lt;Table.Row&gt; 包含在 &lt;Link&gt; 中时,它使该行可点击,但它破坏了设计:

import React from 'react';
import  Table, Image, Icon  from 'semantic-ui-react';
import  Link  from 'react-router-dom';

export default class GenericTable extends React.PureComponent 
  constructor(props) 
    super(props);
  

  render() 
    const  headers, emptyFirstHeader, rows, entityName, idList  = this.props;

    return (
      <Table>
        <Table.Header>
          <Table.Row>
            emptyFirstHeader && <Table.HeaderCell />
            headers.map(header => (
              <Table.HeaderCell key=headers.indexOf(header)>
                header
              </Table.HeaderCell>
            ))
            <Table.HeaderCell textAlign="right" />
          </Table.Row>
        </Table.Header>

        <Table.Body>
          rows.map((row, rowIndex) => (
             <Link // ADDED HERE 
                to=
                  entityName && `/$entityName/$idList[rows.indexOf(row)]`
                >
            <Table.Row key=idList && idList[rowIndex]>
              emptyFirstHeader && (
                <Table.Cell>
                  <Image src=row.cells[0] />
                </Table.Cell>
              )

              
                (emptyFirstHeader ? row.cells.shift() : row,
                row.cells.map((cell, cellIndex) => 
                  if (cell === undefined) 
                    return null;
                  
                  return (
                    <Table.Cell
                      key=
                        idList && `$idList[rowIndex] $headers[cellIndex]`
                      >
                      cell
                    </Table.Cell>
                  );
                ))
              

              <Table.Cell>
                <Link
                  to=
                    entityName && `/$entityName/$idList[rows.indexOf(row)]`
                  >
                  <Icon name="chevron right" />
                </Link>
              </Table.Cell>
            </Table.Row>
         </Link> // CLOSED HERE
          ))
        </Table.Body>
      </Table>
    );
  

如何做到不影响设计?

【问题讨论】:

【参考方案1】:

如果您确实需要语义 html,您可以编辑 Table.Row 以使用 Link 作为其组件,就像这样。然后给 Row 一个类或样式display: table-row

<Table.Row as=Link style=display: "table-row" to="/">content of the Row</Table.Row>

您可以用as 属性替换默认元素,库会将任何其他属性传递给新组件,因此如果您传递to,它会将链接传递给链接组件。

【讨论】:

如您所见,Table 是从semantic-ui-react 导入的。所以Table.Row 是其中的一部分。在这种情况下可以这样添加吗? 我完全理解这一点,并且该库中的 Row 接受 prop as 可用于将默认的 tr 元素替换为您喜欢的任何内容,只需尝试我发送的 sn-p。 我添加了,它使行可点击,但我不知道是否可以在那里添加正确的链接。如果在您的回答中允许as=Link,则该链接是实际页面的链接,因此我尝试将其添加为:as=Link to= entityName &amp;&amp; /$entityName/$idList[rows.indexOf(row) ] 似乎不正确,因为它有错误 不要将链接放入as,然后添加另一个道具to(将更新答案)

以上是关于如何禁用 Link/href 所做的 css 更改的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地存储 javascript 函数所做的 css 更改?

显示通过 Chrome 开发者工具所做的所有更改

我如何知道对分支所做的最新更改是啥?

如何监视对 Azure 存储帐户防火墙规则所做的更改并发出警报

如何丢弃对分支所做的所有更改?

如何在本地测试对 Jenkinsfile 所做的更改?