英文:
header disappears after a split second
问题
以下是您的代码:
class AppModal extends Component {
    static propTypes = {
        noDocs: PropTypes.bool
    };
    constructor(props) {
        super(props);
        this.state = {
            catSelected: false
        }
    }
    onChange = value => {
        this.setState({
            catSelected: true
        })
    }
    render() {
        const header = (
            <div>
                {
                    this.state.catSelected && this.props.noDocs && (
                        <p>
                            selected req don't apply
                        </p>
                    )
                }
            </div>
        );
        return (
            <Modal
                header={header}>
                <form>
                    {ADD_DOC.map(item => (
                        <Row key={item}>
                            <Col>
                                <Field
                                    component="input"
                                    onChange={(e, val) => this.onChange(val)}
                                />
                            </Col>
                        </Row>
                    ))}
                </form>
            </Modal>
        )
    }
}
const mapStateToProps = (state, props) => {
    const initialValues = {
        noDocs: true
    }
    let noDocs = formValueSelector('addDoc')(state, 'noDocs');
    noDocs = !!noDocs
    return {
        noDocs
    };
}; 
export default connect(mapStateToProps)(
    reduxForm()(AppModal)
);
关于您的问题,您想要确保标题仅在 this.state.catSelected && this.props.noDocs 为 true 时显示。如果标题在不应显示时短暂出现然后消失,这可能是由于组件的重新渲染导致的。
您可以尝试在 render 方法的开始处添加一个条件,以确保只有在 this.state.catSelected && this.props.noDocs 为 true 时才渲染标题:
render() {
    const shouldRenderHeader = this.state.catSelected && this.props.noDocs;
    const header = (
        <div>
            {shouldRenderHeader && (
                <p>
                    selected req don't apply
                </p>
            )}
        </div>
    );
    // ...其余代码...
}
这将确保标题只在满足条件时才渲染,避免了在不应显示时短暂出现和消失的问题。
英文:
below is my code
I have an AppMdal Component where i need to show the header when both catSelected and noDocs are true.
For some reason, It works as expected but when the header is not supposed to show , it appears for a split second and then disappears. How do i stop that ?
ADD_DOC is an array of items. I made sure that that's always there. There's no other CSS rules that might cause the issue
class AppModal extends Component {
static propTypes = {
noDocs :this.propTypes.bool
};
constructor(props) {
super(props);
this.state = {
catSelected: false
}
}
onChange= value => {
this.setState({
catSelected: true
})
}
render() {
const header = (
<div>
{
this.state.catSelected && this.props.noDocs && (
<p>
selected req don't apply
</p>
)
}
</div>
);
return (
<Modal
header={header}>
<form>
{ADD_DOC.map(item => (
<Row>
<Col>
<Field>
component={input}
onChange={(e, val) => this.onChange(val)}
</Field>
</Col>
</Row>
))}
</form>
</Modal>
)
}
}
const mapStateToProps = (state, props) => {
const initialValues={
noDocs = true
}
let noDocs = formValueSelector('addDoc')(state, 'noDocs');
noDocs = !!noDocs
return {
noDocs
};
}; 
export default connect(mapStateToProps) {
reduxForm()(AppModal)
}
I cannot get my head around why the header appears and disappears for a split second. How do i avoid it. header should show only when this.state.catSelected && this.props.noDocs is true.
答案1
得分: 1
将组件的状态中的catSelected初始化为true,而不是false。这将防止初始时显示标题。
constructor(props) {
  super(props)
  this.state = {
    catSelected: true
  }
}
更新onChange方法,以根据value参数设置catSelected。这确保了当值发生变化时,catSelected会正确更新。
onChange = value => {
  this.setState({
    catSelected: !!value
  })
}
只有当catSelected和noDocs都为true时才渲染标题,这可以防止它在短暂地出现和消失。
render() {
  const header =
    this.state.catSelected && this.props.noDocs ? (
      <div>
        <p>selected req don't apply</p>
      </div>
    ) : null
  // 你的其余代码...
}
英文:
Initialize catSelected in the component's state to true instead of false. This will prevent the header from being shown initially.
constructor(props) {
  super(props)
  this.state = {
    catSelected: true
  }
}
Update the onChange method to set catSelected based on the value parameter. This ensures that catSelected is updated correctly when the value changes.
onChange = value => {
  this.setState({
    catSelected: !!value
  })
}
Render the header only when both catSelected and noDocs are true, which prevents it from briefly appearing and disappearing.
render() {
  const header =
    this.state.catSelected && this.props.noDocs ? (
      <div>
        <p>selected req don't apply</p>
      </div>
    ) : null
  // Rest of your code...
}
答案2
得分: 0
Nazrul Chowdhury的答案有效,但消息会显示在初始视图上,这不是我想要的。
我观察到在我的mapStateToProps中为'redux'状态值'noDocs'设置了'initialValues'。
当我在initialValues中将noDocs设置为false时,我能够停止出现和消失标题。
下面也修复了这个问题:
const initialValues = {
  noDocs: false
}
英文:
Answer from Nazrul Chowdhury works but the message shows on the initial view which i don't want.
I have observed that there is 'initialValues' for 'noDocs' redux state value set in my mapStateToProps.
when i set noDocs to false in initialValues, i was able to stop appearing and disappearing the header.
below also fixed the issue
const initialValues = {
noDocs = false 
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论