gpt4 book ai didi

javascript - 将用作内联样式的函数附加到 componentWillMount

转载 作者:行者123 更新时间:2023-11-30 15:50:06 25 4
gpt4 key购买 nike

我正在学习 React。我在 vanilla JS 中有一个小函数,它随机生成一个给定的图像。由于它是随机的,并且没有(有意)保存到任何状态,因此每个状态更改也会更改图像,这是我试图避免的。该图像将用作 <body> 上的内联样式, 所以它可以用作我的背景图像。

如果我设置这个 myBackgroundcomponentWillMount 上运行,它只在组件安装之前呈现一次,然后我可以完成我需要的,但我不知道那里应该有什么。

class homePage extends React.Component {
constructor () {
super()
this.state = {}
}

get myBackground () {
const imageArr = ['cat.jpg', 'dog.jpg', 'horse.jpg']
const randomImg = imageArr[Math.floor(Math.random() * imageArr.length)]
const bgImg = {backgroundImage: 'url(' + randomImg + ')'}

return bgImg
}

componentWillMount () {
this.myBackground // doesn't work
}

render () {

// with the current status, below image is changed
// whenever a given state is changed. It needs to be changed
// only right before component is mounted
return <body style={this.myBackground}>
...
}
}

我怎样才能拥有this.myBackground附加到 componentWillMount 并且能够在渲染中使用它?请注意,创建一个 setState预计不会处理此行为。

最佳答案

您在 render 中使用 this.myBackground,这是一个 getter 函数。每次你的组件重新渲染时,它都会再次调用 getter 函数并给你另一个图像。

只需将您的 getter 函数名称更改为其他名称并将其存储到您的实例属性或 componentWillMount 中的 state

class homePage extends React.Component {
// Rename your getter function!
get getNewBackground() {
const imageArr = ['cat.jpg', 'dog.jpg', 'horse.jpg']
const randomImg = imageArr[Math.floor(Math.random() * imageArr.length)]
const bgImg = {backgroundImage: 'url(' + randomImg + ')'}

return bgImg
}

componentWillMount() {
this.myBackground = this.getNewBackground;
}

render() {
return <body style={this.myBackground}>
}
}

严肃地说,你不应该像那样使用 getter 函数,你的组件应该如下所示:

class HomePage extends React.Component {

constructor(props) {
super(props);

this.state = {
backgroundImage: this.getNewBackground(),
};
}

getNewBackground() {
const imageArr = ['cat.jpg', 'dog.jpg', 'horse.jpg'];
const randomImg = imageArr[Math.floor(Math.random() * imageArr.length)];
const bgImg = {backgroundImage: 'url(' + randomImg + ')'};

return bgImg;
}

render() {
return <body style={this.state.myBackground}>
}
}

关于javascript - 将用作内联样式的函数附加到 componentWillMount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39502382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com