Как передать и событие, и индекс через функцию

#javascript #reactjs

#javascript #reactjs

Вопрос:

Итак, я пытаюсь передать это значение индекса в функцию removeNote. Но он выдает ошибку, и я, похоже, не могу ее понять. Та же структура работает в add note, но когда я пытаюсь запустить ее в remove note здесь, мне нужен дополнительный аргумент, и я, похоже, не могу этого сделать.

Основной метод, который вызывает проблемы, заключается в том, что метод removeNote Я просто хочу получить индекс, а затем он отправляет данные на мой node.js сервер, который удаляет заметку из MongoDB.

Журнал ошибок

 import React ,{useEffect, useState} from 'react';
import axios from 'axios'; 
import Navbar from './Navbar'
import './Notes.css'
function Notes(){

//This is just a string because we are sending just one 
//might have to make it an array at some point
const[notes , setNote] = useState(String) ; 
const[index, setIndex] = useState(); 

var dataArr = [] ; 

const [dataSet , setDataSet] = useState([]); 
const [dataList, setDataList] = useState(); 

useEffect(() =>{
    console.log("Use Effect Notes.js");

    axios.post('/api/user/notes' ).then(res=>{
        dataArr = res.data[0].notes ; 
        //console.log(dataArr) ;
        console.log(dataArr); 
        setDataSet(res.data[0].notes); 
       
    }).catch(err=>{
        console.log('it didnt work'   err); 
    }); 

    console.log("The array that i got ");
}, []) ;

const DataList = dataSet.map((element, index)=>{
    return <div className ="row justify-content-center">
        <div class="col-md-8 text-left"> 
        <h1 style={{color:"white" , fontSize: "30px"  }}> {index}. {element}</h1>

        <button className="btn btn-secondary" onClick={removeNote(index)}>Delete</button>
        </div>
        </div>
})
/*
function settingIndex(index) {
    console.log("settingIndex"   index);
    setIndex(index)
    removeNote(event); 
}
*/

function noteDown(event){
    event.preventDefault();
    
    var newNote ={
        notes : notes
    }

    console.log("note down "   newNote);
    axios.post('/api/user/notes/add/' , newNote).then(res=>{
        console.log(res); 
    }).catch(err=>{
        console.log(err); 
    })
    window.location.href='/app/notes/'
}

function removeNote(event, index){
    event.preventDefault(); 
    console.log("this is removeNote"   index);
    
    axios.post('/api/user/notes/remove/', index).then(res=>{
        console.log("removing index"   index); 
    }).catch((err)=>{
        console.log(err); 
    });
    window.location.href='/app/notes/'
    }

    return(
    <div>
    <div> 
        <h1 style={{color:'white'}} > Notes </h1>
    </div> 
        <form onSubmit={noteDown}>
            <input type="text" placeholder="Note" className='form-control' value={notes}  onChange={(e)=>{setNote(e.target.value)}}/>
            <input type="submit" value="AddNote" className="btn btn-primary"/> 
            
        </form> 
        <div>{DataList}</div>
    </div> 
); 
}export default Notes; 
  

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

1. Что вы должны делать, так это onClick={(event)=>removeNote(event,index)}

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

3. Не уверен, где вы печатаете, index но map имеет обратный вызов, который определяет значение index .

4. Не могли бы вы неоднозначно относиться к значению значения index undefined.

5. Внутри const DataList . Вот где вызывается примечание об удалении.

Ответ №1:

Пожалуйста, попробуйте это.

 <button className="btn btn-secondary" onClick={e => removeNote(e, index)}>Delete</button>
  

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

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

2. @RashadArab функция index in map() сама по себе является аргументом, поэтому она там отлично работает, но ваша removeNode() функция ожидает два аргумента event , index и вы передаете только индекс