【问题标题】:Functional components, reactJS. I have a button next to a span inside a div. I want the button to target the span so I can delete the span on click功能组件,reactJS。我在 div 内的 span 旁边有一个按钮。我希望按钮以跨度为目标,因此我可以在单击时删除跨度
【发布时间】:2020-06-28 19:57:59
【问题描述】:

基本上,我是在询问我在标题中输入的内容。我有一个相邻的跨度和按钮,并且 onclick 我希望该按钮能够隐藏跨度或将其从状态中完全删除。 This is what the page looks like with the button next to the span (UPDATED) 这是我的代码

import React, {useState} from "react";
import { NavLink } from "react-router-dom";
import {Button} from "react-bootstrap";

const SavedStrain = (props) => {
  console.log(props.savedList);

  const editResponse = () => {

  }

  const removeResponse = () => {
    const removeFromSavedList = props.removeFromSavedList;
    //removeFromSavedList()
  }

  console.log(props)


  return (
    <div className="saved-list">
      <h3> Saved Strains: </h3>

      {props.savedList.map(strain => (
        <div>
          <NavLink to={`/strains/${strain}`}>
            <span className='name'> {strain} </span>
          </NavLink>
          <Button className='delete' onClick={removeResponse}>Delete</Button>
        </div>
      ))}
      
    </div>
  )
}
 
export default SavedStrain;

Here is my props (UPDATED)

这是我的组件 removeFromSavedList 所在的位置。

import React, {useEffect, useState} from 'react';
import { Route, Link } from 'react-router-dom';
import axios from 'axios';
import UserCreation from './components/UserCreation';
import Login from "./components/Login";
import StrainCard from './components/StrainCard';
import { Container } from "reactstrap";
import NavBarComponent from "./components/NavBarComponent";
import SavedStrain from './components/SavedStrain';
import Strain from './components/Strain';
import StrainDetails from './components/StrainDetails';

function App(props) {
  const [strains, setStrains] = useState([]);
  const [strain, setStrain] = useState([]);
  const [savedList, setSavedList] = useState([]);
  
  useEffect(() => {
    const getStrains = () => {
      axios
        .get('http://strainapi.evanbusse.com/CEIl7eN/strains/search/all')
        .then(response => {
          setStrains(response.data);
        })
        .catch(error => {
          console.error('Server Error', error.response);
        });
    }
    getStrains();
  }, []);


console.log(strains)

  useEffect(() => {
    setStrain(Object.keys(strains).slice(0, 20))
  }, [strains])

  const addToSavedList = strain => {
    setSavedList([...savedList, strain]);
    console.log(savedList);
  };

  const removeFromSavedList = (strain) => {
    setSavedList(savedList.filter(element => element !== strain))
  }

  const editSavedStrain = (event) => {
    event.preventDefault();
    setSavedList(strain === event.target.value)
  }

  return (
    <Container className="App">
        <NavBarComponent />
      <Route exact path='/'>
        <Link to='/login'>Log in</Link>
      </Route>
        <Route exact path='/login'>
            <Login />
        </Route>
      <Route exact path='/signup'>
        <UserCreation />
      </Route>
      <Route exact path='/strains' render= { () => <StrainCard strains={strains} />} />
      <Route exact path='/strains/:strain' render = {(props) => <StrainDetails {...props} strains={strains} addToSavedList={addToSavedList} savedList={savedList} />} />
      <Route exact path='/savedstrains' render = {(props) => <SavedStrain {...props} savedList={savedList} removeFromSavedList={removeFromSavedList} editSavedStrain={editSavedStrain} /> } />
    </Container>
  );
}

export default App;

【问题讨论】:

  • 我注意到removeFromSavedList() 被评论了,看来这就是你所需要的。有问题吗?
  • 是的,我尝试将应变放入 removeFromSavedList 的参数中,但应变未定义。查看我上传的道具图片
  • 我基本上只需要一种方法来调用每个单独的跨度,这样我就可以在 removeResponse 函数中实现它。类名“名称”不起作用,因为它只会删除所有跨度(我认为)
  • 您的屏幕截图已将 savedList 显示为空。所以,基本上你不会得到任何列表。你到底想发生什么?
  • 对不起,那是不正确的。我更新了图像。我希望能够在单击删除按钮时删除跨度(并希望也可以使用跨度删除该按钮)

标签: reactjs onclick react-functional-component


【解决方案1】:

您需要使用从地图中获得的应变调用removeFromSavedList 处理程序。

<Button className='delete' onClick={() => props.removeFromSavedList(strain)}>Delete</Button>

请注意,这会替换 SavedStrain 中的 removeResponse,您可以将其删除。

【讨论】:

  • 这造成了一个无限循环,这就是 removeResponse 存在的原因(当我将其设置为 onClick 时我不调用它)。我认为可能需要编辑 removeFromSavedList,因为当我设置 element === 应变时,它会删除所有跨度和按钮。
  • 你能准确地显示你正在使用的循环代码吗?
猜你喜欢
  • 2016-03-07
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2022-11-18
相关资源
最近更新 更多