首先,我尝试检查用户的id是否与DB中的ID匹配。如果是这样,那么为hasApplded
和toggle
设置一个新状态,但我收到以下警告在现有状态转换期间无法更新(例如在渲染或其他组件中)...
我甚至试着调用一个函数,它在render之外,并且说了同样的话。但是如果我从按钮组件调用render by
onPress={}
方法之外的函数,那么一切都很好。但是在这种情况下,当用户访问页面时,我需要首先检查此项,如果已应用
返回false
,则使用按钮
render() {
let { hasApplied } = this.state;
let { toggle } = this.state;
let matchUserId = [];
const textValue = toggle ? 'APPLIED' : 'APPLY NOW';
const buttonBg = toggle ? '#848d95' : '#34ed1c';
const buttonState = toggle ? 'false' : 'true';
const { navigation } = this.props;
const { goBack } = this.props.navigation;
const { jobBusiness, locationBusiness } = this.props.navigation.state.params;
let { user, location, job, data, business } = this.props.navigation.state.params;
// Check the available applied ids and concatenate objects in Array
// Check if user_id match any of appliedUserId
if (!hasApplied) {
job.applied.map(o => {
matchUserId.push(o.user_id);
});
const resultUserId = [].concat.apply([], matchUserId);
hasApplied = resultUserId.includes(this.props.user_id)
// this.onButtonPress()
this.setState({hasApplied: true, toggle: true})
}
有人能找到解决办法吗?
谢谢
使用React,您不应该也不需要在render()中设置state。
我建议将状态检查放在componentDidMount()中。这样做的目的是保证在呈现组件时在componentDidMount()函数中执行任何代码,从而允许您执行检查、设置等。
基本上,要做到这一点:
componentDidMount() {
// check if the user ID matches what's in the database
// if the above is true, setState as needed
}
请注意,可以使用三元表达式在React渲染中显示或不显示内容。让我举一个例子:
{ (this.state.whateverStateYouWantToCheck)
? <div className="class-of-your-choice">Content you wish to display.</div>
: null }
在上面,如果this.state.whateverStateYouWantTocheck为true,则'?'之后的代码将被渲染。如果为false,则不会呈现任何内容(null)。
最后一件事,因为我不知道在这种情况下你的组件/容器结构是什么,所以我不确定你引用的userID是存储在这个组件还是父容器中。如果它在父容器的状态下可用,您肯定希望将其作为道具传递下去。如果你有任何关于实现这个的问题,让我知道!
使用我描述的方法,您可以在这里找到一个很好的解决方案。
问题内容: 我需要能够在文本区域(即,,,)中呈现一些HTML标记,但是textareas仅将其内容解释为文本。有没有一种简单的方法,而无需依赖外部库/插件(我正在使用jQuery)?如果没有,您知道我可以使用任何jQuery插件吗? 问题答案: 这与不可能。您正在寻找的是一个内容可编辑的 div,这很容易做到:
问题内容: 我被困住了。我在单独的文件上有几个单独的组件。如果我在main.jsx中渲染它们,如下所示: 一切正常,但我想知道这是否是一个好习惯?也许可以做一些像只有一个ReactDom.render这样的事情: 我尝试了各种LandingPageBox变量,以某种方式包括了其他两个组件,但没有运气。它们有时在页面外渲染,依此类推。我认为应该看起来像这样: 但是此代码仅呈现PageTop和Page
问题内容: 我需要能够在文本区域(即)中呈现一些HTML标记,但是textareas仅将其内容解释为文本。有没有一种简单的方法,而无需依赖外部库/插件(我正在使用jQuery)?如果没有,您知道我可以使用任何jQuery插件吗? 问题答案: 这与不可能。您正在寻找的是一个内容可编辑的 div,这很容易做到: jsFiddle
页面渲染设置 页面渲染功能开启后能自动加载出网页中的ajax内容 服务器中需要安装谷歌浏览器,支持linux、win系统 centos7安装chrome的命令: wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm yum localinstall google-chrome-stable_
我在Javascript上制作了一个程序,创建了mandelbrot分形,并在html画布上绘制了它。我的渲染方法是每行迭代,从0到500像素,然后简单地循环创建500行500像素。 我的问题是,当我渲染它的时候,(用更多的放大率刷新页面),它需要很多时间。300倍的放大率大约在30秒内工作,但5000倍需要一个多小时。请帮忙。我想有非常高的放大率和图像加载迅速。 我通过一个下载的文件运行我的程序
问题内容: 我有以下代码: 我想做的是使用base64编码在JEditorPane上呈现图像以存储图像。它不必是base64,但这是我尝试在JEditorPane上呈现HTML内容时所获得的,但是我需要使用BufferedImage上的图像(由应用程序生成),并且,确实希望不必将映像保存到硬盘中的文件中。 我能以某种方式在Swing组件中显示BufferedImage以及HTML(在IMG标签给定