是否可以为组件定义默认上下文,以便如果父组件没有将上下文传递给子组件,则子组件不会中断?我现在唯一能想到的是
<form action="list.php" method="post">
<input type="text" name="names">
<br>
<input type="submit" value="Submit">
<?php
if(!isset($name)) {$name = '';}
if(!isset($names)) {$names = '';}
if(!isset($value)) {$value = '';}
if(!isset($myarray)) {$myarray = '';}
$name = filter_input(INPUT_POST, 'name');
$names = filter_input(INPUT_POST, 'names');
$myarray = filter_input(INPUT_POST, 'myarray');
if($myarray === NULL){
$myarray = array();
}
$myarray = $names;
$name = explode(' ', $myarray);
foreach($name as $value){
echo ($value)."<br>";
}
$myarray = $names;
$name = explode(' ', $myarray);
foreach($name as $value){
echo asort($value)."<br>";
}
$myarray = $names;
$name = explode(' ', $myarray);
foreach($name as $value){
echo arsort($value)."<br>";
}
?>
那会有用吗?
答案 0 :(得分:1)
Context类似于props,除了上下文中的更改实际上不会触发渲染。通常上下文从州或商店获取其价值,因此通常不是问题。另一个缺点是不像道具,React没有提供为它设置默认值的方法。
你可以在react的repo中发出一个功能请求。解决方法是在使用之前为其分配默认值。 e.g:
class MyComponent {
// use this.getRole to access the role
getRole() {
return this.context.role || 'public';
}
}
编辑:您的代码段不起作用,因为在渲染管道期间父级可能会覆盖上下文值;加上它没有记录直接更新上下文对象时会发生什么。