我们的团队已经与React Native合作了将近一年,我们早期遇到的一个问题是渲染速度。我们的应用程序中有多个组件需要用户拖动,状态更改(与shouldComponentUpdate结合使用)根本不足以实现此目标。
我们已经通过两种方式解决了这个问题,而且我想知道这些方法在多大程度上是犹太人和黑客攻击。
Direct Manipulation和setNativeProps - 我们经常使用setNativeProps,我们已经创建了类似Redux的框架;但是,它不是修改状态,而是使用setNativeProps来提高速度。这样做的目的是将setNativeProps扩展到仅在组件内使用的范围内;但是,我们仍尽可能使用状态更改。
Scrollview和TextInput - 我们设法以这样的方式旋转和定位Scrollviews和TextInputs以使用setNativeProps,以便拖动内容更流畅,更原生,文本可以是修改得比状态改变更快。
我们想知道所有这些都是犹太人,因为React Native网站只注意到它的复杂性:
setNativeProps势在必行,并将状态存储在本机层(DOM,UIView等)中,而不是存储在React组件中,这使得您的代码更难以推理。
我们应该改造我们的应用程序吗?
答案 0 :(得分:0)
不建议拨打 <select name="country" id="country">
<?php $countries = $wpdb->get_results( 'SELECT * FROM countries' ); ?>
<option value="">
<?php if(isset($_POST['country'])){echo htmlentities($_POST['country']); } else { echo "Select Country *"; }?>
</option>
<?php foreach($countries as $country){ ?>
<option <?php echo ($_POST['country'] == $country->country_name ? 'selected="selected"':''); ?> value="<?php echo $country->country_name; ?>"><?php echo $country->country_name; ?>
</option>
<?php } ?>
</select>
,但如果让它达到您想要的质量,我不认为这是一个巨大的红旗。正如文档警告的那样,它确实使您的代码更难以推理,因为它在您的本机视图中设置了不在您的React组件层次结构中的状态。
驯服这种复杂性的两种方法是减少可以通过JSX或setNativeProps
在给定组件上设置道具的不同代码段的数量,并逐渐远离setNativeProps
并减少渲染改为使用setNativeProps
和shouldComponentUpdate
。
如果您使用Redux,不可变数据结构可以更轻松地实现PureComponent
以及Reselect选择器。如果经常呈现的组件具有创建许多元素的shouldComponentUpdate
方法,则将这些元素的组重构为纯组件,这些组件不一定需要经常呈现。 constant elements Babel transform将删除大部分永不改变的元素,只需创建一次;当React在两个连续的render()
次传递中看到相同的元素时,它将不会第二次重新渲染该元素。