【问题标题】:How can i add and remove elements from array on click in reactjs?如何在reactjs中单击时从数组中添加和删除元素?
【发布时间】:2020-08-26 18:20:27
【问题描述】:

我正在尝试创建一个呈现链接数组的函数,并且我想创建一个文本输入和一个从数组中的输入添加值的按钮。我将链接保存在对象的状态中,如下所示:

sourceLinks: {
0: "https://www.w3schools.com/html/"
1: "https://www.apachefriends.org/docs/"
2: "https://docs.moodle.org/38/en/Windows_installation_using_XAMPP"
}

我已经设法呈现这样的链接:

renderLinks() {
        
        let sessionLinks = this.state.sessionLinks;
        let links = [];
        Object.values(sessionLinks).map((link) => {
            links.push(<div className="column">
                <span>
                    <InputPreview inputValue={link} classes="w-300" />
                </span>
            </div>)
        })
        
        return links;

    }

InputPreview 是我用来显示链接的组件。我正在尝试在渲染的链接下方添加一个文本输入和一个按钮,将值添加到数组中,并在每个链接旁边添加一个图标,将其从数组中删除。我试图在一个函数 renderLinks() 中完成所有操作,然后在渲染中调用它。我知道我必须从数组中推送和切片项目并更新状态,但我很挣扎,因为我刚刚开始学习反应。请帮忙:)

【问题讨论】:

    标签: javascript arrays reactjs


    【解决方案1】:

    您可以使用以下代码添加和呈现链接。

    import React from "react";
    
    class ItemList extends React.Component {
      state = {
        links: ["item1"],
        newItem: ""
      };
    
      submit(e, newLink) {
        e.preventDefault();
        let updatedLinks = this.state.links;
        updatedLinks.push(newLink);
        this.setState({ links: updatedLinks });
      }
    
      render() {
        return (
          <React.Fragment>
            <ul>
              {this.state.links?.map((link, i) => (
                <li key={i}>
                  <p>{link}</p>
                </li>
              ))}
            </ul>
            <form onSubmit={(e) => this.submit(e, this.state.newItem)}>
              <input
                type="text"
                value={this.state.newItem}
                onChange={(e) => this.setState({ newItem: e.target.value })}
              />
              <button type="submit">ADD</button>
            </form>
          </React.Fragment>
        );
      }
    }
    
    export default ItemList;
    

    让我知道进一步澄清。

    【讨论】:

    【解决方案2】:

    这是一个带有功能组件和钩子的示例

    import React, { useState } from 'react';
    
    const sourceLinks = [
      'https://www.w3schools.com/html/',
      'https://www.apachefriends.org/docs/',
      'https://docs.moodle.org/38/en/Windows_installation_using_XAMPP',
    ];
    
    export const ListLinks = () => {
      const [links, setLinks] = useState(sourceLinks);
      const [newLink, setNewLink] = useState('');
    
      const handleAdd = () => {
        setLinks(links => [...links, newLink]);
      };
      const handleChangeNewLink = e => {
        const { value } = e.target;
        setNewLink(value);
      };
      return (
        <div>
          <div style={{ display: 'flex', justifyContent: 'center' }}>
            <input type='text' value={newLink} onChange={handleChangeNewLink} />
            <button onClick={handleAdd}>Add</button>
          </div>
          <br />
          {links.map((link, index) => (
            <p key={index}>{link}</p>
          ))}
        </div>
      );
    };
    
    

    这是结果:

    最后,阅读文档,管理状态是必不可少的。

    【讨论】:

    • 谢谢,这很有用,但我可以使用基于类的组件吗?
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2017-01-30
    • 2018-01-08
    • 1970-01-01
    • 2022-01-23
    • 2017-06-11
    • 1970-01-01
    • 2019-11-17
    相关资源
    最近更新 更多