Удалить текущую задачу в сопоставленном элементе с помощью кнопки удаления в не работает

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я пытаюсь создать свой самый первый список задач с НУЛЯ. Это означает, что абсолютно никаких руководств или копирования кода, это скорее тест для меня.

Тем не менее, я наткнулся на кирпичную стену. В настоящее время мое приложение работает как таковое.

Создан компонент ввода, который позволит пользователю вводить задачу, он содержит кнопку отправки. Когда задача отправлена, реквизит передается в Todos.js компонент, который содержит «карту», которая отображает все задачи на странице, он будет отображать LI внутри, содержащий задачу, и LI будет содержать кнопку удаления.

Однако, похоже, я не могу понять, как удалить задачу с помощью кнопки удаления, может кто-нибудь помочь мне указать правильное направление?

Код:

Todos.js

 import React, { Component } from "react"

const Todos = (props) => {
  const deleteTodo = (e) => {
    console.log(e)
  }

  return (
    <div class="todo_list">
      <ul>
        {props.todos.map((todo) => {
          return (
            <li key={todo} className="new_todo">
              {todo}
              <button id="todo_del" onClick={deleteTodo}>
                Delete
              </button>
            </li>
          )
        })}
      </ul>
    </div>
  )
}

export default Todos

 

Input.js

 import React, { useState } from "react"

import Todos from "./Todos"

const Input = (props) => {
  const [todo, setTodo] = useState([])
  const [input, setInput] = useState("")

  const setInputState = (e) => {
    setInput(e.target.value)
    console.log(input)
  }

  const addTodo = (e) => {
    e.preventDefault()
    setTodo([...todo, input])
    setInput("")
  }

  return (
    <>
      <div class="input">
        <form>
          <input
            type="text"
            id="todo_input"
            onChange={setInputState}
            value={input}
          />
          <input type="submit" id="submit_btn" onClick={addTodo} />
        </form>
      </div>
      <div class="todo_list">
        <Todos todos={[...todo]} />
      </div>
    </>
  )
}

export default Input
 

Ответ №1:

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

Список задач поддерживается хуком useState во входном компоненте. Вам разрешено передавать функции в качестве реквизита.

Также помните, что map() это позволит вам передавать как значение (todo), так и второй аргумент (индекс). Тогда компоненты, которые вы сопоставляете, будут знать об индексе и смогут передать его в вашу deleteTodo() функцию.

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

1. Спасибо, теперь я продолжаю! Теперь я просто не могу понять, как удалить эту конкретную LI, как только она будет нацелена. Это не часть массива, поэтому я не могу использовать Splice (я знаю, я знаю, это ДОЛЖНО быть частью одного) Есть идеи, какую функцию я бы использовал?

2. Соединение — это путь. У вас есть индекс Li, поэтому вы можете передать его функции, которая знает о массиве, и передать индекс функции удаления.