我使用React-Native与Redux,我想呈现一个按钮,如果登录用户是合格的。不知何故,按钮不显示!
用于存储数据,我使用的是react-nate-simu-store
renderIfEligible(toRender) {
const building = this.props.building;
const timings = this.props.timings;
if (building && timings) {
store.get(storage.userKey).then(user => {
if (user != null) {
if (building.submitter.includes(this.props.userId)) {
console.log('RENDER'); // THIS IS PRINTED OUT IN THE BROWSER
return toRender;
}
} else {
console.log('NO RENDER');
return false;
}
});
}
}
// Function call
{this.renderIfEligible(
<Button style={{marginTop: 20}} small danger transparent onPress={() => alert("delete")}><Icon name="trash" /></Button>)}
知道为什么console.log()工作时按钮不显示吗?
我补充说
constructor(props) {
super(props);
this.state = { showButton: false};
}
....
renderIfEligible(toRender){
self = this;
if (building.submitter.includes(this.props.userId)) {
self.setState({ showButton: true});
} else {
self.setState({ showButton: false});
}
按钮
未显示,因为store.get(storage.userKey)
正在返回用户
对象的promise
,然后使用then
函数将其映射到组件(或false
)。
由于您没有返回then
函数的结果,因此renderifficible
的结果始终是未定义的
(您的返回的
用于lambda函数)。
不幸的是,只需将函数更改为return store.get(storage.userKey)=
看看这个答案,看看如何解决这个问题。
为了使此按钮基于react native simple store正确渲染,您需要初始化组件中用于初始渲染的store.get(storage.userKey)
中的值,然后在componentDidMount
中调用store.get()
方法获取用户密钥
,并将其设置为默认值。这里有一个小例子。
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
isEligible: false,
};
}
componentDidMount() {
store.get(storage.userKey).then(user => {
if (user !== null) { // add to this if statement any other checks you need
this.setState({ isEligible: true });
}
});
}
render() {
const { building, timings } = this.props;
const { isEligible } = this.state;
if (building && timings && isEligible) {
return (
<Button ... />
);
}
return null;
}
}
基本上,您只需要为组件提供一个默认状态,直到获得正确的数据。对于本例,默认状态为组件不返回任何内容。我认为,作为一般规则,React呈现需要是同步的,因此,如果需要异步获取数据以便正确呈现,则只需在异步查询的值解析后,通过呈现生命周期再次发送组件即可。
如何使用JSX进行条件渲染? 例如,我这里有div,如果props的值为null,我想呈现文本“不知道”,否则如果props不等于null,则呈现props。 例如: 我试过了,但没有成功。知道我做错了什么吗? 提前感谢!
如何在样式组件中使用条件渲染来设置我的按钮类在React中使用样式组件? 在css中,我会这样做: 如果我尝试使用'
对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:
JSF的 @ViewScoped不可用,因为它与CDI冲突 提交表单时,JSF动态呈现组件的值变为空 有条件呈现的输入组件不更新值 未调用CommandButton/CommandLink/Ajax操作/Listener方法或未更新输入值 我能想到导致这种行为的几种情况: “rendered”似乎是基于backing bean中的值重新计算的,而不是UI中给出的新值(如果默认为1,则提交时再次为1
我有以下代码; 我遇到的问题是条件渲染线; 就好像它只识别OR运算符之间的一个条件,即放在第一位的条件。有没有可能在React with条件呈现中OR()运算符不可用? 如果是的话,我该如何实现以下的目标呢?例如基于2或条件的呈现。
我想动态呈现JSX,如下所示; 因此,我希望仅当“showSubTextAndIcon”为true时,才渲染该子文本和图标。现在,上述方法不起作用,我得到一个语法错误,说:; 相邻的JSX元素必须包装在一个封闭的标记中。你想要一个JSX片段吗 这工作,如果我添加一个包装列布局。然而,当show SubTextAndIcon是真的时,这会扰乱我的布局。 注意:列布局是从材料ui库派生的。