Результат MediaWiki API

Это HTML-представление формата JSON. HTML хорош для отладки, но неудобен для практического применения.

Укажите параметр format для изменения формата вывода. Для отображения не-HTML-представления формата JSON, присвойте format=json.

См. полную документацию или справку API для получения дополнительной информации.

{
    "batchcomplete": "",
    "continue": {
        "gapcontinue": "Spring_Data_MongoDB",
        "continue": "gapcontinue||"
    },
    "warnings": {
        "main": {
            "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/postorius/lists/mediawiki-api-announce.lists.wikimedia.org/> for notice of API deprecations and breaking changes."
        },
        "revisions": {
            "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used."
        }
    },
    "query": {
        "pages": {
            "109": {
                "pageid": 109,
                "ns": 0,
                "title": "React",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "\n= \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 =\n\n* \u0412 JSX \u0432 \u0431\u043b\u043e\u043a\u0435 return \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0432 ( &lt;div&gt;...&lt;/div&gt; ); \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 js \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 ; \u0441\u0430\u043c\u0438.\n* \u041a\u043b\u044e\u0447\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 React \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442 key \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435.\n* event.preventDefault(); - \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 onclick=\"return false;\"\n\n= \u041e\u0442\u043b\u0430\u0434\u043a\u0430 =\n\nhttps://github.com/facebook/react-devtools\n\n\n= \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b =\n\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432.\nhttps://learn-reactjs.ru/basics/state-and-lifecycle\n\n\u041c\u0435\u0442\u043e\u0434 componentDidMount() \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0431\u044b\u043b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043d \u0432 DOM. \n\n\u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0434\u0430\u043b\u0451\u043d \u0438\u0437 DOM, React \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 componentWillUnmount() \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430.\n\nhttps://m.habr.com/ru/post/358090/\n\n== Constructor ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n* \u0415\u0441\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f class properties \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u2013 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0435 bind \u043d\u0430 \u0442\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u043a\u0430\u043a \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0438.\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (side effects) (\u0412\u044b\u0437\u043e\u0432\u044b AJAX \u0438 \u0442.\u0434.)\n\n== [deprecated] componentWillMount ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 this.setState\n* \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\n* \u0412\u044b\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u044b (\u0412\u044b\u0437\u043e\u0432 AJAX \u0438 \u0442.\u0434.) \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 server-side-rendering.\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (\u0412\u044b\u0437\u043e\u0432 AJAX \u0438 \u0442.\u0434.) \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\n\n== [deprecated] componentWillReceiveProps(nextProps) ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (state) \u0441 props\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (\u0412\u044b\u0437\u043e\u0432\u044b AJAX \u0438 \u0442.\u0434.)\n\n== shouldComponentUpdate(nextProps, nextState, nextContext) ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (\u0412\u044b\u0437\u043e\u0432\u044b AJAX \u0438 \u0442.\u0434.)\n* \u041d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0439\u0442\u0435 this.setState\n\n== [deprecated] componentWillUpdate(nextProps, nextState) ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (state) \u0441 props\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (\u0412\u044b\u0437\u043e\u0432\u044b AJAX \u0438 \u0442.\u0434.)\n\n== componentDidUpdate(prevProps, prevState, prevContext) ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u044b (\u0412\u044b\u0437\u043e\u0432\u044b AJAX \u0438 \u0442.\u0434.)\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0439\u0442\u0435 this.setState \u0442.\u043a. \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0443.\n\n== componentDidCatch(errorString, errorInfo) ==\n\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0430\u0448 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043e\u0448\u0438\u0431\u043e\u043a. \n\n\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043a\u0430, \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:\n* errorString \u2014 .toString() \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043e\u0448\u0438\u0431\u043a\u0435\n* errorInfo \u2013 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u0435\u043c componentStack, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.\n\n== componentDidMount ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0439\u0442\u0435 \u0441\u0430\u0439\u0434-\u044d\u0444\u0444\u0435\u043a\u0442\u044b (\u0412\u044b\u0437\u043e\u0432\u044b AJAX \u0438 \u0442.\u0434.)\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0439\u0442\u0435 this.setState \u0442.\u043a. \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0443.\n\n== componentWillUnmount ==\n\u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u0423\u0434\u0430\u043b\u044f\u0439\u0442\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0438 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u0439 (listeners) \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\n\n\u041d\u0415 \u0414\u0415\u041b\u0410\u0419\u0422\u0415:\n* \u041d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0439\u0442\u0435 this.setState, \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0445 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u043b\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u044b.\n\n== React 16.3+ \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 ==\n=== static getDerivedStateFromProps(nextProps, prevState) ===\n\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (state) \u0438 props \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0415\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043c\u044b\u0441\u043b \u2014 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0430 componentWillRecieveProps.\n\n=== getSnapshotBeforeUpdate(prevProps, prevState) ===\n\u0414\u0440\u0443\u0433\u0430\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u043d\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u201cpre-commit \u0444\u0430\u0437\u0435\u201d, \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0437 VDOM, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u0432 DOM.\n\n=== \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ===\n\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u043b\u0438\u0437\u0430\u0445 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u044b:\n* componentWillRecieveProps \u2013 UNSAFE_componentWillRecieveProps\n* componentWillUpdate \u2013 UNSAFE_componentWillUpdate\n\n= Controlled &lt;-&gt; uncontrolled input element =\n== \u041f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 ==\n\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0430\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 development-mode:\n<syntaxhighlight>\nWarning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa).\nDecide between using a controlled or uncontrolled input element for the lifetime of the component.\n</syntaxhighlight>\n\n\u041e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 input \u0431\u044b\u043b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 (\u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442).\n\n\u0427\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 uncontrolled mode? \u042d\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f input value={undefined}.\n\n\u041a\u0430\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c? input value={valueWithUndefinedState || &apos;&apos;}\n\n= Detect rerendering =\n\nhttps://stackoverflow.com/questions/41004631/trace-why-a-react-component-is-re-rendering\n\n<syntaxhighlight lang=\"typescript\">\npublic componentDidUpdate(prevProps: any, prevState: any) {\n  Object.entries(this.props).forEach(([key, val]) =>\n    prevProps[key] !== val && console.log(`Prop '${key}' changed`)\n  );\n  Object.entries(this.state).forEach(([key, val]) =>\n    prevState[key] !== val && console.log(`State '${key}' changed`)\n  );\n}\n</syntaxhighlight>\n\n= \u0420\u0435\u043d\u0434\u0435\u0440 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 =\n<syntaxhighlight>\ninterface IProps<P extends ICustomProps> {\n   ... \n  custom: new (props: P) => React.Component<P>;\n}\n\nclass XXXX extends React.Component<IProps<ICustromProps>, IState> {\n    public render() {\n         ...\n        const C = this.props.custom;\n        component = (<C prop1={prop1} prop2={date} />);\n        return (\n            <div>\n                {component}\n            </div>\n        );\n    }\n}\n</syntaxhighlight>"
                    }
                ]
            },
            "36": {
                "pageid": 36,
                "ns": 0,
                "title": "Spring",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[:\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f:\u0420\u0430\u0431\u043e\u0442\u0430]]\n\n= \u041e\u0431\u0449\u0438\u0435 =\n== \u041c\u043e\u0434\u0443\u043b\u0438 ==\n=== \u0427\u0442\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b ===\n# Inversion of Control-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440: \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c Java-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Java-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f JDBC- \u0438 ORM-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0447\u0438\u0441\u043b\u0435 Java-based environments.\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438: \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 API \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 Java.\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a MVC: \u043a\u0430\u0440\u043a\u0430\u0441, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 HTTP \u0438 \u0441\u0435\u0440\u0432\u043b\u0435\u0442\u0430\u0445, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (customization).\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430: \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 Java-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u044c \u0432 \u0441\u0442\u0438\u043b\u0435 RPC, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0430\u044f RMI, CORBA,HTTP-based \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044f web-\u0441\u0435\u0440\u0432\u0438\u0441\u044b (SOAP).\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438: \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438 \u0441\u0442\u0430\u0432\u0448\u0438\u0445 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u0430\u043a\u0442\u0438\u043a \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 Spring Security (\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a Acegi).\n# \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u043a\u0430\u0440\u043a\u0430\u0441, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0430\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Java \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c.\n\n=== \u0427\u0442\u043e \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b ===\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f: \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 Java-\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JMX.\n# \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438: \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432-\u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JMS, \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 JMS API.\n\n== Transactional ==\n\n\u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0435\u0442\u0441\u044f checked \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 commit, \u0430 \u043d\u0435 rollback.\n\n\u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f rollback \u043f\u0440\u0438 checked \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u0430\u043c\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432 \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u0435 rollbackFor.\n\n== Data / Repository ==\n\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c findByXXX, countByXXX:\n\n[https://docs.spring.io/spring-data/jpa/docs/2.0.8.RELEASE/reference/html/#jpa.query-methods.query-creation \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 2.0.8]\n\n[http://docs.spring.io/spring-data/jpa/docs/1.11.3.RELEASE/reference/html/#jpa.query-methods.query-creation \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 1.11.3]\n\n\n\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c limit, pageable (\u0441\u043c. \u043d\u0438\u0436\u0435 \u043f\u0440\u043e Pageable):\n[https://docs.spring.io/spring-data/jpa/docs/1.11.9.RELEASE/reference/html/#repositories.limit-query-result \u041b\u0438\u043c\u0438\u0442 \u0432\u044b\u0434\u0430\u0447\u0438 / \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u0430\u044f \u0432\u044b\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432]\n\n\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043b\u0438\u043c\u0438\u0442\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 Pageable.\n\n\nJPA with Hibernate, p. 262, 11.2.1 Understanding database-level concurrency - \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0443\u0440\u043e\u0432\u043d\u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430.\n\n=== Interface based projections ===\n\n[https://docs.spring.io/spring-data/jpa/docs/2.0.8.RELEASE/reference/html/#projections]\n\n== Security ==\n\n@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)\n\n=== Securing methods with annotations ===\n\n@Secured\n@EnableGlobalMethodSecurity(jsr250Enabled=true)\n\n@RolesAllowed\n\n=== Using expressions for method-level security ===\n{| class=\"wikitable\" border=\"1\"\n|-\n! \u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\n! \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\n|-\n| @PreAuthorize\n| Restricts access to a method before invocation based on the result of evaluating an expression\n|-\n| @PostAuthorize\n| Allows a method to be invoked, but throws a security exception if the expression evaluates to false\n|-\n| @PostFilter\n| Allows a method to be invoked, but filters the results of that method based on an expression\n|-\n| @PreFilter\n| Allows a method to be invoked, but filters input prior to entering the method\n|}\n\n== Cloud Messaging / Kafka ==\n\n\u0412 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u0441\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438.\n\n=== Spring boot 1.5.14 / cloud stream binder kafka 1.2.1 === \n\n<syntaxhighlight>\nspring.cloud.stream.bindings.my-sink.group: group8\nspring.cloud.stream.kafka.bindings.my-sink.consumer.configuration.autoCommitIntervalMs: 36000000\nspring.kafka.consumer.groupId: group8\nspring.kafka.consumer.autoCommitInterval: 36000000\n</syntaxhighlight>\n\n=== Spring boot 2.0.3 / cloud stream binder kafka 2.0.0 ===\n\n<syntaxhighlight>\nspring.cloud.stream.kafka.binder.configuration.group.id=group7\nspring.cloud.stream.kafka.binder.configuration.auto.commit.interval.ms=3600000\n</syntaxhighlight>\n\n= \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0438\u043d \u0432\u043d\u0443\u0442\u0440\u0438 =\n\nhttps://docs.spring.io/spring/docs/3.2.4.RELEASE_to_4.0.0.M3/Spring%20Framework%203.2.4.RELEASE/org/springframework/aop/framework/AopContext.html\n\n\n[[\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f:\u0420\u0430\u0431\u043e\u0442\u0430]]\n[[\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f:Java]]\n[[\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f:Spring]]"
                    }
                ]
            }
        }
    }
}