UseState, как сделать массив пустым?

avatar
Ethan M
9 августа 2021 в 00:36
65
3
2

Я пытаюсь установить clickFavIconArray обратно в пустой массив с помощью хука.

В принципе, у setClickFavIconArray есть список идентификаторов, showFavIcon() проверяет этот идентификатор, и если он содержит тот же идентификатор, я хочу удалить его из массива и обновить setClickFavIconArray до нового массива.

Однако, кажется, что это всего лишь дополнение к исходному clickFavIconArray несмотря ни на что. Есть ли способ очистить состояние clickFavIconArray обратно в пустой массив []?

Некоторая помощь здесь была бы здоровой.

const [clickFavIconArray, setClickFavIconArray] = useState([]);

    function showFavIcon(id){
        if (clickFavIconArray.includes(id)) {
            const newArray = clickFavIconArray.filter(item => !id.includes(item))
            setClickFavIconArray(newArray)
        }
            setClickFavIconArray([...clickFavIconArray, id])
    }
Источник
async await
9 августа 2021 в 00:40
2

Ты собираешься просто сказать setClickFavIconArray([])?

Cobra_8
9 августа 2021 в 00:41
0

вы фильтруете массив, обновляете состояние и сразу после (двумя строками ниже) снова добавляете идентификатор в массив? возможно, я не понимаю проблемы, но поможет ли это, если вы добавите оператор возврата после первого setClickFavIconArray(newArray)?

Ответы (3)

avatar
Farhad Rad
9 августа 2021 в 00:46
0

Есть две проблемы с кодом

  1. функция фильтра кажется недействительной, ее следует заменить на
clickFavIconArray.filter(item => id != item)
  1. Вы снова добавляете идентификатор в массив с помощью этого
setClickFavIconArray([...clickFavIconArray, id])

Если вы хотите удалить идентификатор, эта строка в вашем коде не нужна. Однако вы всегда можете установить clickFavIconArray в пустое состояние массива, используя этот код:

setClickFavIconArray([])
avatar
Cobra_8
9 августа 2021 в 00:44
0

Чтобы гарантировать, что идентификатор не будет немедленно добавлен в массив снова, добавьте оператор return внутри оператора if.

const [clickFavIconArray, setClickFavIconArray] = useState([]);

function showFavIcon(id){
    if (clickFavIconArray.includes(id)) {
        const newArray = clickFavIconArray.filter(item => !id.includes(item));
        setClickFavIconArray(newArray);
        return; // make sure that the next line is not executed
    }
    setClickFavIconArray([...clickFavIconArray, id])
}
avatar
Audwin Oyong
9 августа 2021 в 00:42
0

Просто передайте новое значение пустого массива в setClickFavIconArray():

setClickFavIconArray([])
Cobra_8
9 августа 2021 в 00:43
0

это отвечает на вопрос ОП относительно названия, но, вероятно, не решает его проблему?