开发者问题收集

初始渲染后使用效果不会触发

2021-10-31
99

我有一个包含 16 个对象的数组,我使用“number”属性来删除不需要的元素。因此,如果我想要一个包含 8 个元素的数组,我会输入:

<Images number="8"/>

但是我的 useEffect 在初始渲染后不会运行,但只有在我稍后对数组进行更改后才会运行,这会返回所有 16 个元素,如果我输入了错误,请等待错误屏幕渲染并修复错误,我的浏览器会按原样显示 8 个元素。这是我的其余代码:

const Images = (props) => {
    const [deck, setDeck] = useState(data);
    // data.length is equal 16

    const sliceDeck = () => {
        data.splice(parseInt(props.number, 10), data.length)
    }
    
    useEffect(()=>{
        sliceDeck()
        setDeck(data)
    }, [])

    return (
        <>
        <div className="img-container">
           {deck.map(object => <div className="img-on" key={object.id}><img src={object.src} alt=""/></div>)}
        </div>

        </>
    );
  }
  
  export default Images;
1个回答

您需要将 props.number 添加到依赖项数组中,以确保它在每次更新时运行

const Images = (props) => {
    const [deck, setDeck] = useState(data);
    
    useEffect(()=>{
      if(!isNaN(props?.number)){
        const temp = data.splice(parseInt(props?.number, 10), data.length)
        setDeck(temp)
      }
    }, [props?.number])

    return (
        <>
          <div className="img-container">
            {deck.map(object => <div className="img-on" key={object.id}>
              <img src={object.src} alt=""/>
            </div>)}
          </div>
        </>
    );
  }
  
  export default Images;

强调文本

Craques
2021-10-31