Неперехваченная ошибка типа: не удается прочитать свойство ‘laneId’ неопределенного для добавления карты

#reactjs #trello

#reactjs #trello

Вопрос:

После добавления карты и добавления данных в таблицу я хочу обновить информацию о картах с помощью исходного идентификатора карты, который возвращается из таблицы. Для этого я использовал eventBusHandle следующим образом :

 import React, {Component, useEffect, useState} from 'react';
import Board from "react-trello";


const TaskBoard = (props) =>{
const [eventBus, setEventBus] = useState(undefined);

useEffect(() => {
        if (card.length !== 0) {
            eventBus.publish({type: 'ADD_CARD', laneId:card.column_id, cards: {id: card.id, title: card.title, label: "1 sec", description: card.description}});
        }
    }, [card.length]);

return(
        <Board
        id="board1"
        components={components}
        style={{
            background: '#F1F2F4'
        }}
        data={boardData}
        draggable
        handleLaneDragStart={handleLaneDragStart}
        handleLaneDragEnd={handleLaneDragEnd}
        canAddLanes
        onLaneAdd={onLaneAdd}
        onLaneDelete={onLaneDelete}
        handleDragEnd={handleDragEnd}
        onCardDelete={onCardDelete}
        onCardAdd={onCardAdd}
        editable
        eventBusHandle={setEventBus}
        />
    );

}

 

Мне нужно обновить идентификатор реальной карты для удаления или перемещения в другое место.

введите описание изображения здесь

Комментарии:

1. Откуда publish() берется?

2. привет @yudhiesh, react-trello предоставляет .publish() для добавления / обновления / удаления карты.. вы можете проверить это здесь — github.com/rcdexta/react-trello

Ответ №1:

В вашем коде нет способа узнать, откуда берется информация о карте. Метод публикации обновит информацию о плате «определенной» информацией. Таким образом, вам нужно иметь определенную карту, прежде чем использовать этот метод.

Кроме того, setEventBus происходит после того, как плата создана (смонтирована). Если вы пытаетесь обновить плату с помощью publish() до того, как произойдет setEventBus, это не сработает.

Поэтому я бы использовал этот код для обновления карты:

 const onCardAddHandler = (card, laneId) => {
  eventBus.publish({
    type: 'UPDATE_CARD', //use this type instead of ADD_CARD
    laneId:laneId,
    card: {
      id: card.id,
      title: card.title,
      label: "1 sec",
      description: card.description
    }
  });
}
 

Затем на вашей плате замените свой onCardAdd следующим образом:

 <Board
  id="board1"
  components={components}
  style={{ background: '#F1F2F4' }}
  data={boardData}
  draggable
  handleLaneDragStart={handleLaneDragStart}
  handleLaneDragEnd={handleLaneDragEnd}
  canAddLanes
  onLaneAdd={onLaneAdd}
  onLaneDelete={onLaneDelete}
  handleDragEnd={handleDragEnd}
  onCardDelete={onCardDelete}
  onCardAdd={onCardAddHandler}. //here I collect de card information
  editable
  eventBusHandle={setEventBus}
/>