reactjs - 子组件不使用 shouldComponentUpdate 重新渲染
问题描述
我的子组件在其 prop 更改时更改其状态。我想重新渲染子组件 ImageSlide 以便在状态更改时调用不同的字符串。className 更改得很好,控制台很好地显示了更改后的值。但它不会重新渲染视图。
我尝试了 shouldComponentUpdate,但没有成功。如何重新渲染 ImageSlide?
let languages = {
en: require('textEnglish'),
kr: require('textKorean')
}
class ImageSlide extends Component {
constructor(props) {
super(props);
this.state={
lang: this.props.lang,
url: this.props.url
}
}
languageSelect=()=> {
if (this.state.lang === 'kr') {
return 'kr';
} else {
return 'en';
}
}
static getDerivedStateFromProps(nextProps, prevState){
if (nextProps.lang !== prevState.lang |
nextProps.url !== prevState.url )
{
return {lang : nextProps.lang, url: nextProps.url} ;
}
}
shouldComponentUpdate(nextProps, nextState){
return true;
//I tried also:
// if (nextProps.url !== this.state.url |
// nextProps.lang !== this.state.lang)
// return true;
}
render() {
const Text=languages[this.languageSelect()];
return (
<div className="test-transition">
{console.log(this.state.lang)}
{console.log(this.state.url)}
{console.log(Text["p1_3_"+String(this.state.url)])}
<div className={`pic${this.state.url}`}>
{Text["p1_3_"+String(this.state.url)]}
</div>
</div>
);
}
}
解决方案
检查新道具是否发生变化或没有使用任何生命周期事件,例如componentDidUpdate
orshouldComponentUpdate
或者您也可以尝试componentWillReceiveProps
(不推荐,因为它已弃用)
componentDidUpdate()
{
/*Check for prev props condition*/
this.forceUpdate(); /*this method renders the component*/
}
推荐阅读
- react-native - 将 TWITTER_CONSUMER_KEY / SECRET 放入客户端以进行 oAuth1 Twitter 登录是否存在安全漏洞?
- shell - 从制表符分隔的文本文件中选择前两列,并用“_”字符替换
- django - 在顶部显示模型的第一篇文章
- windows - 通过单击按钮在 Microsoft Visual Studio(通用 Windows 应用程序)中显示另一个页面
- node.js - 如果第三个键为真,则比较 mongodb 文档的两个键
- python - 使用 Python 寻找两支球队之间的最佳匹配
- angular6 - 应用溢出:隐藏到 .mat-tab-body-content
- android - 使用 ConstraintLayout 的简单但复杂的布局
- salesforce - 无法从 SOQL 查询中的 createdDate 中提取年份
- marklogic - marklogic 中的 Cts 和 Xmdp 函数