2016-08-29 2 views
1

У меня есть компонент, который с этим JSON:Удаление подкомпонента из компонента React?

{ 
     "id": 138, 
     "created_at": "2016-08-29T08:20:28+02:00", 
     "updated_at": "2016-08-29T08:20:28+02:00", 
     "title": "Some title.", 
     "description": "", 
     "employee": { 
     "id": 500, 
     "name": "Name, 
     "title": "Code Monkey, 
     "geo_code": "UK", 
     "image": "" 
     }, 
     "assigned_employee": { 
     "id": 34, 
     "name": "Nicolai", 
     "title": "Developer", 
     "geo_code": "uk", 
     "image": "" 
     }, 
     "status": { 
     "id": 1, 
     "name": "Pending", 
     "color": "#FAFAFA" 
     }, 
     "priority": { 
     "id": 1, 
     "name": "Low", 
     "color": "#F56954", 
     "rank": 0 
     }, 
     "taskables": [ 
     { 
      "id": 1, 
      "created_at": "2016-08-22T17:07:33+02:00", 
      "type": "partner", 
      "partner": { 
      "id": 652, 
      "created_at": "2012-07-31T09:43:43+02:00", 
      "name": "Beierholm", 
      "geo_code": "UK", 
      "city": "London", 
      } 
     }, 
     { 
      "id": 2, 
      "created_at": "2016-08-22T17:09:07+02:00", 
      "type": "lead", 
      "lead": { 
      "id": 21211, 
      "created_at": "2016-08-16T13:08:21+02:00", 
      "name": "LeadName", 
      "geo_code": "UK", 
      "city": "London", 
      } 
     } 
     ] 
    }, 

у меня есть событие, чтобы иметь возможность удалить taskables из (родительского компонента) DOM, внутри редукторов у меня есть это, когда карта текущих элементов в штат. Но элемент не удаляется.

if(task.id === action.task_id){ 
    if(task.taskables.length > 0) { 
     task.taskables.filter(function(taskable){ 
      return taskable.id !== action.taskable_id; 
     }) 
    } 
} 

Любые идеи?

ответ

0

Array.prototype.filter() возвращает новый массив.

Вы закодированы:

if(task.taskables.length > 0) { 
     task.taskables.filter(function(taskable){ 
     return taskable.id !== action.taskable_id; 
    }) 

Это, кажется, бросает новый массив прочь - вы не должны вернуть его, или что-то подобное?

Для разъяснения: Ваш запрос к task.taskables.filter() делает nothing.

Он не мутирует массив task.taskables. Он возвращает результат, который вы не используете.

+0

Проблема с этим является то, что удаляется весь компонент вместо удаления ребенка только, и когда * taskable * is null не получится – jycr753

+1

Может быть. Я не вижу, как мы можем сказать, не видя больше кода. Но просто для того, чтобы быть ясным: это похоже на то, что код, приведенный в моем ответе, мне кажется практически недействительным. Он вызывает функцию в массиве, который не меняет сам массив, и отбрасывает результат. – GreenAsJade

+0

Просто проверьте, поняли ли вы то, что я делал в своем ответе. Я попытался прояснить ситуацию лучше. – GreenAsJade

0

вы можете сделать это, как показано ниже, так что он может удалить элемент, не назначая новый массив,

if(task.id === action.task_id){ 
    if(task.taskables.length > 0) { 
    return { taskables: task.taskables.filter(taskable => 
     taskable.id !== action.taskable_id 
    )} 
    } 
} 
+0

Я не уверен, что он сможет вернуть только часть штата из своего редуктора? – GreenAsJade

Смежные вопросы