【问题标题】:How to force rendering if the global variable value changes?如果全局变量值发生变化,如何强制渲染?
【发布时间】:2016-05-20 22:48:09
【问题描述】:
#File 1:
let ticketEnable = false;

export default class SupportTicketMain extends Component {
  constructor () {
    super();
  }
  render () {
    let expandIcon = <DownIcon/>;
    if (this.state.ticketDetailExpanded) {
      expandIcon = <UpIcon/>;
    }
    return (
      <Section className="ticketMain" primary={true}>
        <TicketHeader expanded={ticketEnable}/>
      </Section>
    );
  }
};

export function setTicketEnablement (value) {
    ticketEnable = value;
}


#file 2:

import { setTicketEnablement } from file1;

export default class SupportTicketTabs extends Component {
  constructor () {
    super();
    this.state = {
      ticketDetailExpanded: false
    };

    this._expandClick = this._expandClick.bind(this);
  }

  _expandClick() {
    this.setState({ticketDetailExpanded: !this.state.ticketDetailExpanded});
    setTicketEnablement(this.state.ticketDetailExpanded);
  }

  render () {
    let expandIcon = <DownIcon/>;
    if (this.state.ticketDetailExpanded) {
        expandIcon = <UpIcon/>;
    }

    return (
          <Button className="expander" type="icon" onClick={this._expandClick}>
             {expandIcon}
          </Button>
    );
  }
};

在这里单击 #file2 的 supportTicketTabs 类中的按钮将更新 #File1 中的全局变量,但如果全局变量值发生更改,则 SupportTicketMain 渲染不会更新!请指导我。

【问题讨论】:

  • 你在哪里调用SupportTicketTabs组件?
  • 在文件#3中作为class Main extends Component { render () { return ( ); }

标签: javascript reactjs


【解决方案1】:

ticketEnable 应该是传递给SupportTicketMain 的道具。包装SupportTicketTabsSupportTicketMain 的组件应该将回调作为修改ticketEnable (toggleTicketEnable) 的值和ticketEnable 的值的道具传递

class Main extends Component {
  constructor (props) {
    super(props);
    this.onToggleTicketEnable = this.onToggleTicketEnable.bind(this);
    this.state = {
      ticketEnabled: false;
    };
  }
  onToggleTicketEnable() {
    this.setState({ ticketEnabled: !this.state.ticketEnabled });
  }
  render () {
    return (
      <App centered={false}>
        <SupportTicketMain ticketEnable={this.ticketEnabled} />
        <SupportTicketTabs onToggleTicketEnable={this.onToggleTicketEnable}/>
      </App>
    );
  }
}

【讨论】:

  • 工作!!非常感谢@Petersen...感谢您指导我正确的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 2019-10-29
相关资源
最近更新 更多