【问题标题】:React-Spring: Invalid Hooks CallReact-Spring:无效的 Hooks 调用
【发布时间】:2020-08-02 13:15:41
【问题描述】:

我正在尝试学习 React-Spring。当我运行它的文档中提供的代码之一时,它会引发错误。知道可能有什么问题吗?如何解决?

我要运行的代码是-

const TextContent = (props) => {

    const [items] = useState([
        { id: '0', title: 'Text1' },
        { id: '1', title: 'Text2' },
        { id: '2', title: 'Text1' }
    ])

    const [index, setIndex] = useState(0);

    const transitions = useTransition(items[index], index => index.id,
        {
            from: { opacity: 0 },
            enter: { opacity: 1 },
            leave: { opacity: 0 },
            config: { tension: 220, friction: 120 }
        }
    )

    useEffect(() => {
        const interval = setInterval(() => {
            setIndex((state) => (state + 1) % items.length);
        }, 4000)
        return () => clearInterval(interval);
    }, []);

    {
        transitions.map(({ item, props, key }) => (
            <animated.div
                key={key}
                style={{ ...props, position: 'absolute' }}
            >
                <p>
                    {item.title}
                </p>
            </animated.div>
        ))
    }
}

export default TextContent;

【问题讨论】:

  • 这是该文件的全部代码吗?
  • @azium 我已经更新了代码。
  • 你的reactreact-dom 版本匹配吗?
  • 另外,能否附上错误截图?
  • @AlDuncanson 是的,它们都是 16.13.1。我也添加了截图

标签: javascript reactjs react-redux react-hooks react-spring


【解决方案1】:

除了 Al Duncanson answer:我的问题是导出 React Fragment 而不是实际标签:

return (
  <>
    { /* springs.map() */ }
  </>
)

钩子在我改成之后就开始工作了

return (
  <div>
    { /* springs.map() */ }
  </div>
)

【讨论】:

    【解决方案2】:

    return 语句添加到您的功能组件

    const TextContent = (props) => {
    
        const [items] = useState([
            { id: '0', title: 'Text1' },
            { id: '1', title: 'Text2' },
            { id: '2', title: 'Text1' }
        ])
    
        const [index, setIndex] = useState(0);
    
        const transitions = useTransition(items[index], index => index.id,
            {
                from: { opacity: 0 },
                enter: { opacity: 1 },
                leave: { opacity: 0 },
                config: { tension: 220, friction: 120 }
            }
        )
    
        useEffect(() => {
            const interval = setInterval(() => {
                setIndex((state) => (state + 1) % items.length);
            }, 4000)
            return () => clearInterval(interval);
        }, []);
    
        return (
            <div>
                {
                  transitions.map(({ item, props, key }) => (
                    <animated.div
                        key={key}
                        style={{ ...props, position: 'absolute' }}
                    >
                        <p>{item.title}</p>
                    </animated.div>
                  ))
                }
            </div>
        )
    }
    
    export default TextContent;
    

    这是一个 codesandbox 我让它工作的地方

    【讨论】:

    • 不运行。我开始相信问题出在配置或其他方面。如果我有多个 react-dom 或 react 文件,我尝试使用 npm ls 显示。结果没有。
    • 你从哪里导入useTransition
    • 我用一个代码框更新了我的答案,我通过添加一个返回语句使其工作
    • 我正在从 'react-spring' 导入 useTransition。
    猜你喜欢
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2020-06-22
    • 2019-09-07
    • 2019-10-17
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多