2016-12-20 8 views
4

Я хочу создать эффект анимации при нажатии. Мне нужно добавить элемент и удалить его за 3 секунды при каждом нажатии. Не один элемент, если пользователи нажимают 100 раз за 3 секунды, я должен добавить 100 элементов и удалить их.Добавьте элементы в DOM, затем удалите их через n секунд?

click() { 
    // create element 
    // append element to div 
    // remove in 3 sec 
} 
render() { 
    return (
    <div className="main" onClick={this.click}>Click it</div> 
    ) 
} 

Это легко сделать с ванильным JS/JQuery

click() { 
    let elm = $('</div>'); 
    elm.addClass('animation'); 
    $('.main').append(elm); 
    setTimeout(() => { 
    elm.remove(); 
    }, 3000); 
} 

Должен ли я использовать React для отображения этих элементов (.map, setState, ...), или я могу использовать ванильный JS (appendChild, removeChild) ?

Простой пример в JQuery - https://jsfiddle.net/W4Km8/10107/

Спасибо.

ответ

3

Вы можете сделать что-то вроде этого:

this.state = { items: [] } 

addItem() { 
    const newItem = (<span>hello</span>) 

    this.setState({ items: this.state.items.concat(newItem) },() => { 
    setTimeout(() => { 
     this.setState({ items: this.state.items.filter(i => i !== newItem) }) 
    }, 3000) 
    }) 
} 

render() { 
    return (
    <div> 
     <div className="main" onClick={this.addItem}>Click it</div> 
     {this.state.items.map((item, i) => 
     <div key={i}>{item}</div> 
    )} 
    </div> 
) 
} 
+0

Считаете ли вы, что это решение лучше, чем ванильный JS? Что бы вы использовали в этом случае? – Dilan

+1

@ Dilan In React вы не должны напрямую манипулировать DOM, если вам не нужно. Так что да, это да «лучше», чем ванильный JS при работе с React – Chris

+0

Удивительный, спасибо большое. Я хотел дважды проверить его. Vanilla JS является более простым способом в этом случае, и мне не нужно повторно отображать компонент при каждом нажатии. Вот почему я спросил об этом. – Dilan

0

Без JQuery, просто использовать встроенные функции JS ваниль на Node с:

добавить класс к элементу: elm.classList.add("animation")

Чтобы добавить элемент в качестве ребенка другого: parent.appendChild(elm) (для вас, parent, вероятно, будет document.querySelector(".main"))

Чтобы удалить ребенка элемента: parent.removeChild(elm) (что эквивалентно, elm.parentNode.removeChild(elm))

+0

Да, это как сделать это довольно легко, но ** Я не могу использовать JQuery для управления DOM, когда я использую React **. Нет? – Dilan

+0

Я имею в виду JQuery или vanilla JS – Dilan

+0

Это _is_ vanilla JS, no jQuery ... Прочитайте ссылки, они указывают на MDN. – qxz

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

  • Нет связанных вопросов^_^