Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应春天-动画<;p>;关于内容变化的要素_Javascript_Reactjs_React Spring - Fatal编程技术网

Javascript 反应春天-动画<;p>;关于内容变化的要素

Javascript 反应春天-动画<;p>;关于内容变化的要素,javascript,reactjs,react-spring,Javascript,Reactjs,React Spring,下面的代码是一个简单的react组件,它使用react spring为p(animated.p)元素设置动画。动画在fadeIn常量中定义,并通过style={fadeIn}标记分配给animated.p元素 //返回并设置元素的动画: 功能报价箱(道具){ const fadeIn=useSpring({opacity:1,from:{opacity:0}); 返回( 在react spring docs页面上,它使用组件的状态(切换)将不透明度从0更改为1,反之亦然,但我不清楚如何在每次我将

下面的代码是一个简单的react组件,它使用react spring
p
animated.p
)元素设置动画。动画在
fadeIn
常量中定义,并通过
style={fadeIn}
标记分配给
animated.p
元素

//返回并设置元素的动画:
功能报价箱(道具){
const fadeIn=useSpring({opacity:1,from:{opacity:0});
返回(
在react spring docs页面上,它使用组件的
状态(
切换
)将不透明度从0更改为1,反之亦然,但我不清楚如何在每次我将新的
道具
传递到
动画.p
元素时将不透明度从0更改为1。 我只是想得到一个简单的文本淡入时,它的变化


对不起,前面的问题有点困惑,这对我来说可能有点太难了。另外,我不完全确定react-spring是否是一个好的选择,它对于我试图实现的目标来说似乎太复杂了。

您可以使用updater函数语法来实现这一点。它是用一个返回初始属性的函数初始化的,然后rns一个更新程序函数(以及
停止
函数,此处未使用),允许覆盖初始属性:

function QuoteBox(props) {
  const [fadeIn, set] = useSpring(() => ({ opacity: 0 }));

  React.useEffect(() => {
    set({ opacity: 1, from: { opacity: 0 }});
  }, [set, props.quote, props.author, props.from]);

  return (
    <>
      <blockquote>
        <animated.p id="text" style={fadeIn}>
          {props.quote}
        </animated.p>
      </blockquote>
      <animated.p id="author" style={fadeIn}>
        {props.author}
        <cite>
          <em>{props.from}</em>
        </cite>
      </animated.p>
    </>
  );
由于所有的道具都是字符串(一种简单的数据类型,其值相等,而不是像对象或数组那样的引用),因此您可以按原样对组件进行记忆,并且仅当其中一个道具发生更改时才会重新加载。这将允许您删除依赖项数组,因为现在只有道具发生更改时组件才会更新:

React.useEffect(() => {
  set({ opacity: 1, from: { opacity: 0 }});
});
如果将来要向该组件传递更多道具,则可能不太理想

参考资料:

const MemoQuoteBox = React.memo(QuoteBox);
const currString = props.quote + props.author + props.from;
const prevString = React.useRef(currString);

React.useEffect(() => {
  if (currString === prevString.current) return;
  set({ opacity: 1, from: { opacity: 0 }});
  prevString.current = currString;
}, [set, currString]);
现在我们使用传递的值ESlint不应该发出警告。我已经利用了一个事实,即道具在这里都是字符串(因为它们在概念上是链接的),但是如果将它们分开,原则是一样的

脏退货:

const MemoQuoteBox = React.memo(QuoteBox);
const currString = props.quote + props.author + props.from;
const prevString = React.useRef(currString);

React.useEffect(() => {
  if (currString === prevString.current) return;
  set({ opacity: 1, from: { opacity: 0 }});
  prevString.current = currString;
}, [set, currString]);

只需直接从Effice返回值,EsLink就应该将它们视为“已使用”,虽然此时您也可以只使用<代码> ESLIt禁用下一行 >:

React.useEffect(() => {
  set({ opacity: 1, from: { opacity: 0 }});
  return props.quote + props.author + props.from;
}, [set, props.quote, props.author, props.from]);

问题不清楚。请发布更多代码并解释您想做的更多一点?您想实现什么样的动画?您是对的,回应关于未使用useState和useEffect的投诉,但它有效。我需要更好地查看您的代码和解释。Thanks@marco1618我编辑了一些你如何摆脱的例子既然你提到了这个警告,希望它能有所帮助!非常详尽的解释,谢谢!这很有帮助。