将JSX从组件方法返回到呈现方法

时间:2018-04-21 02:54:11

标签: javascript reactjs function jsx react-component

我还是React的新手。我试图在我的类组件下的另一个方法中定义的条件下渲染一个jsx,如下所示:

isWinner = () => {
 let userVotesCount1 = this.state.user1.userVotesCount;
 let userVotesCount2 = this.state.user2.userVotesCount;
 if (userVotesCount1 > userVotesCount2) {
   userVotesCount1++;
   this.setState({ user1: { userVotesCount: userVotesCount1 } });
   return (
     <h3>Winner</h3>
   );
 }
 userVotesCount2++;
 this.setState({ user2: { userVotesCount: userVotesCount2 } });
 return (
   <h3>Loser</h3>
 );}

并且我在渲染方法中调用此方法

<Dialog
   open={open}
   onRequestClose={this.onClose}
      >
 <div>
   <isWinner />
 </div>
 </Dialog>

已经尝试对<isWinner />使用替换{() => this.isWinner()},但我从未获得该方法的返回。我做错了什么?由于我在这里处理状态,我不知道如何使用外部函数执行此操作。由于某种原因,这个功能永远不会被调用。请帮忙!

1 个答案:

答案 0 :(得分:1)

你快到了。你想要做的是使用该方法设置一个标志,然后使用render方法中的标志来有条件地渲染。

constructor(props) {
  ...
  this.state = {
    isWinner: false,
    ...
  }
}
isWinner() {
  ...,
  const isWinner = __predicate__ ? true : false;
  this.setState({
    isWinner: isWinner
  });
}

render() {
  const { isWinner } = this.state;
  return isWinner ? (
    // jsx to return for winners
  ) : (
    // jsx to return for lossers
  )
}