我正在尝试为我的React.js应用程序创建一个搜索栏。
我已将app.js的getSearch()
方法传递给子组件导航以检索输入值。
在getSearch()
方法中,有setState({searchTerm:e.target.value})
是检索到的值,然后我在fetchData()
和{{之后,立即调用app.js的setState()
方法1}}。
getSearch()
方法中将作为fetchData()
的主体传递给this.state.searchTerm
,但是当我输入内容并单击Enter时,它为我提供了fetch()
的先前值,而不是最新更新用户输入的值。
我在做什么错?我正在粘贴我的app.js进行审核:
this.state.searchTerm
答案 0 :(得分:1)
如果需要在fetchIGBD
方法中使用状态,则需要在callback
的{{1}}参数中调用状态。这是必需的,因为setState
是异步的。
setState
或者如果您需要向其传递参数
getSearch = e => {
if (e.key === "Enter") {
this.setState({
searchTerm: e.target.value
}, this.fetchIGBD);
}
};
答案 1 :(得分:1)
您可以使用以下内容:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function authenticated()
{
// Update last_session after logged-in
User::find(Auth::id())->update(['laravel_session'=>Session::getId()]);
}
}
this.setState({
searchTerm: e.target.value
}, () => {
this.fetchIGBD()
});
函数是异步的,这意味着它不会立即执行。
答案 2 :(得分:0)
调用fetchIGBD
的另一种方式是使用setState
方法的回调。它会确保你得到searchTerm
的更新值。它会在setState
完成后触发。
getSearch = e => {
if (e.key === "Enter") {
this.setState({
searchTerm: e.target.value
},function(){
this.fetchIGBD()
}
);
}
};