现在不推荐使用componentWillReceiveProps
,您将如何使用新的getDerivedStateFromProps
工作流程更新传单地图。
这就是我现在所做的:
componentDidMount
加载地图并绘制元素componentDidUpdate
中的元素。这是一些示例代码:
componentDidMount(){
// load leaflet map and draw components
var map = this.map = L.map('leafletmap');
this.map.addData(geojsonData);
}
componentDidUpdate(prevProps,prevState) {
// clear layers and redraw data
if (prevProps.data !== this.props.data) {
this.map.clearLayers();
this.map.addData(geojsonData);
}
}
我必须这样做,因为componentDidMount
只被调用一次而componentDidUpdate
仅在道具更新后被调用。我想我可以在我的工作流程中使用componentDidUpdate
或componentWillReceiveProps
。既然componentWillReceiveProps
已被弃用,并且考虑到getDerivedStateFromProps
总是被调用,我想知道我是否可以在此步骤中绘制所有传单内容,如果这足以在更改道具的地方更新地图
static getDerivedStateFromProps(nextProps) {
// draw stuff on map every time props change
// (layers should be cleared as well)
if (prevProps.data !== this.props.data) {
this.map.clearLayers();
this.map.addData(geojsonData);
}
}
componentDidMount(){
// load leaflet map
var map = this.map = L.map('leafletmap');
}
我遇到的问题是我无法访问this
中的getDerivedStateFromProps
相关:How do I force leaflet to update the map?
答案 0 :(得分:0)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>Show History
<select id="historySelect">
<option value="Yes">No</option>
<option value="No">Yes</option>
</select>
</label>
<table class="table dataTable no-footer" id="dataTable" cellspacing="0" width="100%" role="grid" aria-describedby="dataTable_info" style="width: 100%;">
<thead>
<tr role="row">
<th class="text-center text-primary sorting" tabindex="0" aria-controls="dataTable" rowspan="1" colspan="1" aria-label="Name: activate to sort column ascending" style="width: 66px;">Name</th>
<th class="text-center text-primary hidden sorting" tabindex="0" aria-controls="dataTable" rowspan="1" colspan="1" aria-label="Historic: activate to sort column ascending" style="width: 0px;">Historic</th>
</tr>
</thead>
<tbody>
<tr class="text-center hover-table odd" role="row">
<td>Name</td>
<td class="hist hidden">true</td>
</tr>
<tr class="text-center hover-table odd" role="row">
<td>Name</td>
<td class="hist hidden">false</td>
</tr>
</tbody>
</table>
仅用于根据道具更新/设置状态,而不是执行任何副作用,
getDerivedStateFromProps
功能可以细分为
componentWillReceiveProps
在你的情况下,你会写
static getDerivedStateFromProps(nextProps, prevState) {
//returning the updated state if you want
}
componentDidUpdate(prevProps, prevState) {
//perform side-effects based on props or state change
}
答案 1 :(得分:0)
我想我可以在我的工作流程中使用
componentDidUpdate
或componentWillReceiveProps
。
正如Wazner的评论上面提到的那样,这是不对的。副作用(您正在描述的内容)在componentWillReceiveProps
或getDerivedStateFromProps
中并不安全。 StrictMode
docs page has a section that goes into more detail on why this is。
对于您正在描述的案例,我不清楚为什么您可以继续使用componentDidMount
和componentDidUpdate
作为示例代码。 (因为您之前没有使用过componentWillReceiveProps
- 为什么现在要更改?)