私のreactのアプリケーションでは、URLにパラメータid
を検証し、それに応じてビューをレンダリングする必要があります。ここではサンプルコードです:コンポーネントReactJsでレンダリングする前にurlパラメータを検証するようにマウントする
routes.js
// just relevant lines of code:
import React from 'react';
import { Route, IndexRoute } from 'react-router';
import Foo from '../containers/foo';
const AppRoutes = (
<Route component={Base} path="/">
<Route component={Foo} path="/url/:id"/>
</Route>
);
export default AppRoutes;
Fooクラス
import React, { Component } from 'react';
import { isValid } from '../service';
class Foo extends Component {
state = {
check : true
}
componentWillMount(){
if (isValid(this.props.params.id) == false || 'undefined') {
console.log(isValid(this.props.params.id));
this.setState({
check : false
});
}
}
render() {
if (!this.state.check){
return(...);
}else{
return(...);
}
};
}
export default Foo;
service.js
"use strict";
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// XHR for Chrome/Firefox/Opera/Safari.
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// XDomainRequest for IE.
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// CORS not supported.
xhr = null;
}
return xhr;
}
function fetchId(method, url, id, callback){
var xhr = createCORSRequest(method, url);
if (!xhr) return;
xhr.addEventListener("readystatechange", callback);
xhr.setRequestHeader("content-type", "application/json");
xhr.send(JSON.stringify(query));
}
function isValid(id){
let url = 'https://some/api/url/';
return fetchId('POST', url, id, function(){
return (this.readyState===4 && this.responseText.length>0) ? true : false;
});
}
export default {isValid}
今が有効であるかどうかにかかわらず、undefined
は常にcomponentWillMount()
のに印刷されます。 2つの問題があるようですが、私はブール値レスポンスを正しく返していないか、あるいはcomponentWillMount()
を誤って利用しています。私はdocsと思って、componentWillMount()
が実際にrender()
の前にトリガーすることを知りました。
誰かが本当の問題を指摘し、私が間違っているところを修正してくれますか?
Fooとは何を呼びますか? paramsは反応ルータから来ていますか?もしあなたのルートがどのように設定されているかを私たちに見せることができますか? –
@JoPeyper 'routes.js'の関連する行について言及して質問を更新しました。まだ何かが欠落している場合はお気軽にお問い合わせください。 – adi