当前位置: 首页 > 知识库问答 >
问题:

如何防止react组件每次呈现父组件时都呈现?

许照
2023-03-14

我在一个表单上有一个TextField输入,问题是当我在它上键入时,刚刚键入的值的显示/呈现有一种延迟,我想防止这种延迟。

代码:

export const Contact = (props) => {
  const [formInput, setFormInput] = useState({input: 'name', label: 'Type name'});
¿   const [inputsValue, setInputsValue] = useState({name: '', email: '', message: ''});

    const handleClick = () => {
        switch (formInput.input) {
            case 'name':
                setFormInput({ input: 'email', label: 'type email' });
                break; 
            case 'email':
                setFormInput({ input: 'message', label: 'type message' });
                break;
            case 'message':
                setFormInput({ input: 'name', label: 'type name' });
                handleSubmission();
                break;
            default:
                break;
        }
    }
    const handleChange = event => {
        setInputsValue({
            ...inputsValue,
            [event.target.name]: event.target.value
        });
    }
    const handleSubmission = event => {
        console.log('SUBMITTED CONTACT FORM')
    }
  
    return (
        <form>
            <Grid container>
                <Grid item xs={12} sm={10}>
                <BouncyText />
                </Grid>
            </Grid>
            <Grid container spacing={2}>
                <Grid item xs={12} id="contactFomrField">
                    <TextField
                        fullWidth
                        id={formInput.input}
                        label={formInput.label}
                        name={formInput.input}
                        value={inputsValue[formInput.input]}
                        onChange={handleChange}
                    />
                </Grid>
            </Grid>
            <Grid
                container
                justify="center"
                alignItems="center"
            >
                                <Button
                                    onClick={handleClick}
                                    variant="outlined"
                                    color="primary"
                                >
                                    { formInput.input !== 'message' ? 'Next' : 'Send :)'}
                            </Button>
        </form>
    )
}

共有1个答案

潘意
2023-03-14

handleClick()是传递给子组件的回调(在组件中声明),因此应该包装为usecallback()。否则,该回调函数在rerender之后被重新声明,因此它的引用是不同的,使子组件协调。

https://reactjs.org/docs/hooks-reference.html#usecallback

 类似资料:
  • 我从这里修改了以下组件定义,如下所示。但是,与示例不同的是,每次在组件上移动鼠标时,组件都会重新呈现。 重新渲染非常引人注目: 有人知道为什么会这样吗?

  • 我试图建立一个连接4的游戏,它有一个由7列组件组成的板组件,所有包含6个空间组件。每个列的上方都有一个拖放按钮,该按钮将用于将该件拖放到列中。为了在“红色”和“黑色”玩家之间交替,我创建了一个状态“redorblue”,它返回一个布尔值。 简而言之,当单击Drop按钮时,我希望切换“redorblue”的值,以跟踪轮到谁了。我已经将onClick函数设置为setState({redorblue:!

  • 当我们点击“添加”链接时,我试图呈现需要组件。下面是主要组件的代码: 下面是以防万一的需求组件: 我在第一次单击add链接时实现了我试图实现的目标,即在第一次单击add链接时,need组件没有任何条件地被呈现,当我单击“add”时,need组件再次被呈现,但当我第二次单击“add”链接时,我没有看到任何变化。为什么会这样,我希望在每次单击“Add”链接时呈现Need组件。

  • 对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:

  • 但是当我从ComponentOne切换到ComponentTwo,然后回到ComponentOne时,它被重新构建,我失去了在ComponentOne中已经做过的一切 是否有一种方法,当创建的组件没有呈现时,它不会丢失其所有状态?

  • 我正在构建一个PhotoViewer,当用户按左键或右键时,它可以更改照片。我正在使用React、Redux、React router和React router Redux。当用户按下左键或右键时,我会做两件事,使用并发送一个操作来更新当前查看的照片,。我订阅状态更改以进行调试。 上面的每一行都会触发一个新的状态更改。因为我更新了,所以发送操作会更新存储,而更新url会更新存储,因为react r