我有这段代码:
constructor(props) {
super(props)
this.state = {
loginButton: '',
benchmarkList: ''
}
if (props.username == null) {
this.state.loginButton = <GoogleButton></GoogleButton>
} else {
}
}
它给了我一个ESLint警告:
不要直接改变状态。使用setState() 反应/无直接突变状态。
现在我应该做什么,因为我无法在setState
内直接使用constructor
,因为它会创建error并且像这样更新会给我带来错误。
答案 0 :(得分:5)
constructor(props) {
super(props)
this.state = {
loginButton: props.username == null? <GoogleButton></GoogleButton>: '',
benchmarkList: ''
}
}
或者您可以在componentWillMount()
componentWillMount(){
let loginButton = props.username == null? <GoogleButton></GoogleButton>: '';
this.setState({loginButton: loginButton});
}
答案 1 :(得分:5)
首先,我们不应该将ui组件存储在状态变量中,状态应该只包含数据。所有ui部分都应该在render
方法内。
如果您想根据任何数据render
某个组件,请使用conditional rendering。检查this.state.loginButton
的值,如果是null
,则再渲染该按钮。
像这样:
constructor(props) {
super(props)
this.state = {
loginButton: props.username,
benchmarkList: ''
}
}
render(){
return(
<div>
{!this.state.loginButton ? <GoogleButton></GoogleButton> : null}
</div>
)
}
理想情况下,我们不应将props
值存储在state
中,因此请直接使用this.props.username
,我这样做是因为不了解完整代码。
答案 2 :(得分:0)
如何在ReactJS中更新
constructor
内的状态?
创建数据结构,根据需要进行修改,并在完成所有操作后最终分配给状态:
constructor(props) {
super(props)
let state = {
loginButton: '',
benchmarkList: ''
}
if (props.username == null) {
state.loginButton = true
} else {
state.loginButton = false
}
this.state = state
}
答案 3 :(得分:0)
只需添加 setState
import numpy as np
import gym
from baselines.common.vec_env.subproc_vec_env import SubprocVecEnv
env_name = 'your-env-name'
nproc = 8
T=10
def make_env(env_id, seed):
def _f():
env = gym.make(env_id)
env.seed(seed)
return env
return _f
envs= [make_env(env_name, seed) for seed in range(nproc)]
envs = SubprocVecEnv(envs)
Xt = envs.reset()
for t in range(T):
ut = np.stack([envs.action_space.sample() for _ in range(nproc)])
xtpl, rt, done, info = envs.step(ut)