Как добавить «Реагирующий маршрутизатор» ‹Link› в таблицу материалов?

Я использую библиотеку таблиц материалов - это Datatable на основе Material-UI Table.

Таблица данных имеет свойства редактируемого и добавляет новую запись в ту же таблицу, но я не хочу делать это в той же таблице.

Мне нужно использовать кнопку, потому что я хочу, чтобы она открывала материальное меню пользовательского интерфейса. Однако я не знаю, как добавить ссылку или что-то подобное.

Я попробовал это с помощью следующего фрагмента кода, но он говорит мне, что ссылка не определена, хотя это имеет значение

import React, { useState, useEffect } from 'react';
import MaterialTable from 'material-table';
import EditIcon from '@material-ui/icons/Edit';
import { IconButton } from '@material-ui/core';
import  axios  from 'axios';
import { Link} from 'react-router-dom';

export default function TableProducts() {

const url='/api/products';

const [product, setProduct]= useState({Products:[]});


 useEffect(()=>{
    const getProduct=async()=>{
            const response =await axios.get(url);
            setProduct(response.data);
    }
    getProduct();
},[]);

  return (

<MaterialTable
      title="Products"
      columns={[
        {title: 'id',field: 'id', type: 'numeric', hidden:'false'},
        { title: 'nameproduct',field: 'nameproduct', },
        { title: 'description', field: 'description' },
        { title: 'price', field: 'price' },
      ]} 
      data={product.Products}
      options={{
        filtering: true,
        sorting: true
      }}
      actions={[
        {
          icon: 'edit',
          tooltip: 'Edit ',
          onClick: () => 
            <Link to={`/product/${data._id}/edit`}>Edit</Link> 

        }
      ]}
      />

    );
  }

Я хочу сделать что-то подобное

                <Link
                    to={`/product/edit/${product.id}`}
                    className="btn btn-success mr-2">Editar
                </Link>

person Emm    schedule 05.11.2019    source источник
comment
Ваш код немного не хватает. Трудно сказать, хотите ли вы создать новую ссылку для каждой строки таблицы или что-то еще.   -  person dwjohnston    schedule 05.11.2019
comment
Вы обязательно импортировали ссылку?   -  person Rob    schedule 05.11.2019
comment
@Rob да, я импортирую, импортирую {NavLink, Link} из 'response-router-dom';   -  person Emm    schedule 05.11.2019


Ответы (3)


Вы вложили его в компонент маршрутизатора, например

<Router>
<MaterialTable ...>
  <div>
    <nav>
      <ul>
        <li>
          <Link to="/">Home</Link>
        </li>
        <li>
          <Link to="/about">About</Link>
        </li>
        <li>
          <Link to="/users">Users</Link>
        </li>
      </ul>
    </nav>
   </div>
   </MaterialTable>
  </Router>

Добавлена ​​часть о включении таблицы материалов. Просто попробуйте сделать маршрутизатор корневым контейнером.

person Y M    schedule 05.11.2019
comment
но если я использую стол - person Emm; 05.11.2019

Вместо этого

actions={[
        {
          icon: 'edit',
          tooltip: 'Edit ',
          onClick: () => 
            <Link to={`/product/${data._id}/edit`}>Edit</Link> 

        }
      ]}

Сделай это

actions={[
    rowData => ({
      icon: () => <Link to={`/product/${rowData._id}/edit`}>Edit(Replace with icon code)</Link>
      tooltip: 'Edit ',
      onClick: (rowData)
    })
  ]}

Для получения дополнительной информации посетите https://material-table.com/#/docs/features/actions

person Ravi    schedule 20.02.2021

actions={[
    icon: () => <Link to='/test'><Icon /></Link>,
    tooltip: 'tip',
    onClick: (event, rowData) => 
        localStorage.setItem('selectedRowData', rowData)
    ]}

Ссылка на = '/ test' - ›Желаемый корень, который вы хотите открыть, нажав на действие

Значок - ›Значок действия, который можно использовать при импорте и размещении

onClick - ›В событии Onclick вы сохраняете информацию, которую хотите перенести, в желаемый корень.

Совет: имейте в виду, что если данные большие, лучше использовать redux

person junior programmer    schedule 09.11.2020
comment
Не могли бы вы пояснить свой ответ? - person Michał Tkaczyk; 09.11.2020
comment
использовать localStorage или Redux для передачи данных - person junior programmer; 09.11.2020